From 18907584f494a35a4e5a14a43b010b036ca925ab Mon Sep 17 00:00:00 2001 From: Ramanathan Arunachalam Date: Thu, 1 Oct 2026 19:18:59 +0000 Subject: [PATCH 01/17] build: declare training dependencies and optional storage backends Make iopath available to converters, declare the supported Liger API, and retain optional storage imports. Include the validated uv 0.12.21 lockfile. --- .../utils/easy_io/backends/__init__.py | 19 ++- .../utils/easy_io/backends/registry_utils.py | 16 +- cosmos_framework/utils/easy_io/file_client.py | 13 +- pyproject.toml | 3 +- uv.lock | 158 +++++++++++------- 5 files changed, 132 insertions(+), 77 deletions(-) diff --git a/cosmos_framework/utils/easy_io/backends/__init__.py b/cosmos_framework/utils/easy_io/backends/__init__.py index 8a5a806db..5211dedb3 100644 --- a/cosmos_framework/utils/easy_io/backends/__init__.py +++ b/cosmos_framework/utils/easy_io/backends/__init__.py @@ -17,10 +17,15 @@ ] if TRAINING: - from cosmos_framework.utils.easy_io.backends.boto3_backend import Boto3Backend - from cosmos_framework.utils.easy_io.backends.msc_backend import MSCBackend - - __all__ += [ - "Boto3Backend", - "MSCBackend", - ] + try: + from cosmos_framework.utils.easy_io.backends.boto3_backend import Boto3Backend + except ImportError: + pass + else: + __all__.append("Boto3Backend") + try: + from cosmos_framework.utils.easy_io.backends.msc_backend import MSCBackend + except ImportError: + pass + else: + __all__.append("MSCBackend") diff --git a/cosmos_framework/utils/easy_io/backends/registry_utils.py b/cosmos_framework/utils/easy_io/backends/registry_utils.py index 94cd18532..11581cf55 100644 --- a/cosmos_framework/utils/easy_io/backends/registry_utils.py +++ b/cosmos_framework/utils/easy_io/backends/registry_utils.py @@ -115,8 +115,14 @@ def _register(backend_cls): register_backend("http", HTTPBackend, prefixes=["http", "https"]) if TRAINING: - from cosmos_framework.utils.easy_io.backends.msc_backend import MSCBackend - - # To avoid breaking backward Compatibility, 's3' is also used as a - # prefix for MSCBackend - register_backend("s3", MSCBackend, prefixes=["s3"]) + try: + from cosmos_framework.utils.easy_io.backends.msc_backend import MSCBackend + except ImportError as error: + # multistorageclient is an optional internal S3 dependency. Local, + # HTTP, Docker, and Pyxis training must remain importable without it. + # A later s3:// access fails clearly because no S3 backend is present. + MSC_IMPORT_ERROR = error + else: + # To avoid breaking backward Compatibility, 's3' is also used as a + # prefix for MSCBackend. + register_backend("s3", MSCBackend, prefixes=["s3"]) diff --git a/cosmos_framework/utils/easy_io/file_client.py b/cosmos_framework/utils/easy_io/file_client.py index 650489ff1..cb3af4c54 100644 --- a/cosmos_framework/utils/easy_io/file_client.py +++ b/cosmos_framework/utils/easy_io/file_client.py @@ -73,11 +73,14 @@ class FileClient: } if TRAINING: - from cosmos_framework.utils.easy_io.backends.msc_backend import MSCBackend - - _backends["s3"] = MSCBackend - _backends["msc"] = MSCBackend - _prefix_to_backends["s3"] = MSCBackend + try: + from cosmos_framework.utils.easy_io.backends.msc_backend import MSCBackend + except ImportError: + pass + else: + _backends["s3"] = MSCBackend + _backends["msc"] = MSCBackend + _prefix_to_backends["s3"] = MSCBackend _instances: dict = {} diff --git a/pyproject.toml b/pyproject.toml index 6115f6c11..72c4b4b34 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,6 +34,7 @@ dependencies = [ "hydra-core", "imageio-ffmpeg", "imageio", + "iopath>=0.1.10", "loguru", "msgpack", "nvidia-cudnn-frontend", @@ -85,7 +86,6 @@ train = [ "fvcore", "glfw", "h5py", - "iopath>=0.1.10", "imagecodecs", "ipycanvas", "ipyevents", @@ -94,6 +94,7 @@ train = [ "kornia", "lerobot", "librosa", + "liger-kernel>=0.8.3,<0.9", "lpips", "lz4", "matplotlib", diff --git a/uv.lock b/uv.lock index 0a05554a4..87e87db65 100644 --- a/uv.lock +++ b/uv.lock @@ -1641,6 +1641,7 @@ dependencies = [ { name = "hydra-core" }, { name = "imageio" }, { name = "imageio-ffmpeg" }, + { name = "iopath" }, { name = "loguru" }, { name = "msgpack" }, { name = "nvidia-cudnn-frontend" }, @@ -1670,8 +1671,8 @@ serve = [ { name = "fastapi" }, { name = "gradio" }, { name = "httpx" }, - { name = "ray", version = "2.46.0", source = { registry = "https://pypi.org/simple" }, extra = ["serve"], marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "ray", version = "2.55.1", source = { registry = "https://pypi.org/simple" }, extra = ["serve"], marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "ray", version = "2.46.0", source = { registry = "https://pypi.org/simple" }, extra = ["serve"], marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "ray", version = "2.55.1", source = { registry = "https://pypi.org/simple" }, extra = ["serve"], marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, ] train = [ { name = "aioboto3" }, @@ -1694,7 +1695,6 @@ train = [ { name = "h5py" }, { name = "imagecodecs", version = "2025.3.30", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, { name = "imagecodecs", version = "2026.1.14", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "iopath" }, { name = "ipycanvas" }, { name = "ipyevents" }, { name = "jupyter-compare-view" }, @@ -1702,6 +1702,7 @@ train = [ { name = "kornia" }, { name = "lerobot" }, { name = "librosa" }, + { name = "liger-kernel" }, { name = "lpips" }, { name = "lz4" }, { name = "matplotlib" }, @@ -1980,7 +1981,7 @@ requires-dist = [ { name = "imagecodecs", marker = "extra == 'train'" }, { name = "imageio" }, { name = "imageio-ffmpeg" }, - { name = "iopath", marker = "extra == 'train'", specifier = ">=0.1.10" }, + { name = "iopath", specifier = ">=0.1.10" }, { name = "ipycanvas", marker = "extra == 'train'" }, { name = "ipyevents", marker = "extra == 'train'" }, { name = "jupyter-compare-view", marker = "extra == 'train'" }, @@ -1988,6 +1989,7 @@ requires-dist = [ { name = "kornia", marker = "extra == 'train'" }, { name = "lerobot", marker = "extra == 'train'", git = "https://github.com/mli0603/lerobot.git" }, { name = "librosa", marker = "extra == 'train'" }, + { name = "liger-kernel", marker = "extra == 'train'", specifier = ">=0.8.3,<0.9" }, { name = "loguru" }, { name = "lpips", marker = "extra == 'train'" }, { name = "lz4", marker = "extra == 'train'" }, @@ -5613,6 +5615,26 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b5/ba/c63c5786dfee4c3417094c4b00966e61e4a63efecee22cb7b4c0387dda83/librosa-0.11.0-py3-none-any.whl", hash = "sha256:0b6415c4fd68bff4c29288abe67c6d80b587e0e1e2cfb0aad23e4559504a7fa1", size = 260749, upload-time = "2025-03-11T15:09:52.982Z" }, ] +[[package]] +name = "liger-kernel" +version = "0.8.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "torch", version = "2.10.0", source = { registry = "https://download.pytorch.org/whl" }, marker = "(python_full_version < '3.13' and sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version < '3.13' and sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.13' and sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.13' and sys_platform == 'darwin' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (sys_platform == 'darwin' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train') or (extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "torch", version = "2.10.0+cu128", source = { registry = "https://download.pytorch.org/whl" }, marker = "(python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "torch", version = "2.10.0+cu130", source = { registry = "https://download.pytorch.org/whl" }, marker = "(python_full_version < '3.13' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version < '3.13' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform != 'darwin' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (sys_platform != 'darwin' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "torch", version = "2.13.0", source = { registry = "https://download.pytorch.org/whl" }, marker = "(python_full_version < '3.13' and sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.13' and sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train')" }, + { name = "torch", version = "2.13.0+cu130", source = { registry = "https://download.pytorch.org/whl" }, marker = "(python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213') or (sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train')" }, + { name = "triton", version = "3.6.0", source = { registry = "https://download.pytorch.org/whl" }, marker = "(python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.13' and sys_platform != 'darwin' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "triton", version = "3.6.0", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.12' and sys_platform != 'darwin' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.12.*' and sys_platform != 'darwin' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.12' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.12' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.12' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.12' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.12' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.12.*' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.12.*' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.12.*' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.12.*' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.12.*' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (sys_platform == 'darwin' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "triton", version = "3.7.1", source = { registry = "https://download.pytorch.org/whl" }, marker = "(python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train')" }, + { name = "triton", version = "3.7.1", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'darwin') or (python_full_version < '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.13' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/2f/30d51933d4f53da7c78cc972b7a24cf4292e19e249f5f0c3946e71684562/liger_kernel-0.8.3.tar.gz", hash = "sha256:a5b2a1e297da9e4e8a95b7f303d5b73d1a2fdd023b72d380164f12854551e168", size = 6756028, upload-time = "2026-09-16T18:57:26.309Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/9f/9d1d35fd945b9c84024a46caaf19200d1bfbe536f24f3f1ab6a38480f26c/liger_kernel-0.8.3-py3-none-any.whl", hash = "sha256:c22541c11ba0102b8989e3be3ace3fecc81737dc3f7a7e63e2c587c153eede90", size = 887607, upload-time = "2026-09-16T18:57:24.435Z" }, +] + [[package]] name = "llguidance" version = "1.3.0" @@ -8236,9 +8258,9 @@ name = "opentelemetry-exporter-prometheus" version = "0.61b0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "opentelemetry-api", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "opentelemetry-sdk", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "prometheus-client", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "opentelemetry-api", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "opentelemetry-sdk", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "prometheus-client", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4a/20/9e818fd364d12e8d0cfdce4a3b2d82e24d98c4ceebb315de6b6770b5f214/opentelemetry_exporter_prometheus-0.61b0.tar.gz", hash = "sha256:7c4919bd8e79abd62b610767e80f42c9c3a06c5183f4dd9141eedeb57aea284b", size = 15136, upload-time = "2026-03-04T14:17:26.275Z" } wheels = [ @@ -10142,22 +10164,19 @@ name = "ray" version = "2.46.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version == '3.11.*' and sys_platform == 'linux'", - "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'linux'", - "python_full_version == '3.11.*' and sys_platform == 'darwin'", "python_full_version < '3.11' and sys_platform == 'linux'", "python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux'", "python_full_version < '3.11' and sys_platform == 'darwin'", ] dependencies = [ - { name = "click", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "filelock", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "jsonschema", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "msgpack", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "packaging", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "protobuf", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "pyyaml", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "requests", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "click", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "filelock", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "jsonschema", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "msgpack", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "packaging", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "protobuf", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "pyyaml", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "requests", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/25/a2/0cc3dc138d149dbbf69a90ded986118ae9420a5ac0dbf99e0c5883152950/ray-2.46.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:719244b84df79502e5f09497f256618d94d78d66fbaf229422008a0568d3a0ff", size = 68482152, upload-time = "2025-05-07T21:04:19.538Z" }, @@ -10183,21 +10202,21 @@ wheels = [ [package.optional-dependencies] serve = [ - { name = "aiohttp", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "aiohttp-cors", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "colorful", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "fastapi", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "grpcio", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "opencensus", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "prometheus-client", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "py-spy", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "pydantic", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "requests", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "smart-open", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "starlette", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "uvicorn", extra = ["standard"], marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "virtualenv", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "watchfiles", marker = "python_full_version < '3.11' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version >= '3.12' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "aiohttp", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "aiohttp-cors", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "colorful", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "fastapi", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "grpcio", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "opencensus", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "prometheus-client", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "py-spy", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "pydantic", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "requests", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "smart-open", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "starlette", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "uvicorn", extra = ["standard"], marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "virtualenv", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "watchfiles", marker = "python_full_version < '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, ] [[package]] @@ -10213,7 +10232,10 @@ resolution-markers = [ "python_full_version >= '3.13' and platform_machine != 'aarch64' and platform_machine != 'x86_64' and sys_platform != 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train'", "python_full_version == '3.12.*' and sys_platform == 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train'", "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train'", + "python_full_version == '3.11.*' and sys_platform == 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train'", "python_full_version == '3.12.*' and sys_platform == 'darwin' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train'", + "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train'", "python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train' and extra != 'group-16-cosmos-framework-vllm'", "python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform != 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train' and extra != 'group-16-cosmos-framework-vllm'", "python_full_version >= '3.13' and platform_machine != 'x86_64' and sys_platform == 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train' and extra != 'group-16-cosmos-framework-vllm'", @@ -10275,14 +10297,14 @@ resolution-markers = [ "python_full_version == '3.11.*' and sys_platform == 'darwin' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", ] dependencies = [ - { name = "click", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "filelock", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "jsonschema", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "msgpack", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "packaging", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "protobuf", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "pyyaml", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "requests", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "click", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "filelock", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "jsonschema", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "msgpack", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "packaging", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "protobuf", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "pyyaml", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "requests", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/7e/d0/a85097dd53aaca1a44acc4dd0b3d2c0e9233179433e2ee326e4018ab3cf7/ray-2.55.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:2d5786661e192148719accc959def6cdcabd7a24cd9008005bf3d0e3c8cfd529", size = 65829601, upload-time = "2026-04-22T20:09:10.013Z" }, @@ -10304,24 +10326,24 @@ wheels = [ [package.optional-dependencies] serve = [ - { name = "aiohttp", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "aiohttp-cors", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "colorful", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "fastapi", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "grpcio", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "opencensus", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "opentelemetry-exporter-prometheus", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "opentelemetry-proto", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "opentelemetry-sdk", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "prometheus-client", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "py-spy", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "pydantic", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "requests", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "smart-open", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "starlette", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "uvicorn", extra = ["standard"], marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "virtualenv", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, - { name = "watchfiles", marker = "python_full_version >= '3.12' or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version == '3.11.*' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version == '3.11.*' and extra != 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (python_full_version < '3.11' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "aiohttp", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "aiohttp-cors", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "colorful", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "fastapi", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "grpcio", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "opencensus", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "opentelemetry-exporter-prometheus", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "opentelemetry-proto", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "opentelemetry-sdk", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "prometheus-client", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "py-spy", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "pydantic", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "requests", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "smart-open", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "starlette", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "uvicorn", extra = ["standard"], marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "virtualenv", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, + { name = "watchfiles", marker = "python_full_version >= '3.11' or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-vllm') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train') or (extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-vllm')" }, ] [[package]] @@ -13233,16 +13255,23 @@ resolution-markers = [ "python_full_version >= '3.13' and platform_machine != 'aarch64' and platform_machine != 'x86_64' and sys_platform == 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train'", "python_full_version >= '3.13' and platform_machine != 'aarch64' and platform_machine != 'x86_64' and sys_platform != 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra == 'group-16-cosmos-framework-cu130-train'", "python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", + "python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform != 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", + "python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform != 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", "python_full_version >= '3.13' and platform_machine != 'aarch64' and platform_machine != 'x86_64' and sys_platform == 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", + "python_full_version >= '3.13' and platform_machine != 'aarch64' and platform_machine != 'x86_64' and sys_platform != 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra == 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", "python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", "python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform != 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", "python_full_version >= '3.13' and platform_machine != 'x86_64' and sys_platform == 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", "python_full_version >= '3.13' and platform_machine != 'x86_64' and sys_platform != 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra == 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", "python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", + "python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform != 'linux' and extra == 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", "python_full_version >= '3.13' and platform_machine != 'x86_64' and sys_platform == 'linux' and extra == 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", + "python_full_version >= '3.13' and platform_machine != 'x86_64' and sys_platform != 'linux' and extra == 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", "python_full_version >= '3.13' and sys_platform == 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", + "python_full_version >= '3.13' and sys_platform != 'darwin' and sys_platform != 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", "python_full_version == '3.12.*' and sys_platform == 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", ] wheels = [ { url = "https://download-r2.pytorch.org/whl/triton-3.6.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a2d0b7b9b4f29ade31cf7bd7c237b50d270a2487cf943d034b307a9b3f73d9c7", upload-time = "2026-01-22T23:13:01Z" }, @@ -13263,8 +13292,11 @@ version = "3.6.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version == '3.12.*' and sys_platform == 'linux'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'linux'", "python_full_version == '3.11.*' and sys_platform == 'linux'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'linux'", "python_full_version < '3.11' and sys_platform == 'linux'", + "python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/44/ba/b1b04f4b291a3205d95ebd24465de0e5bf010a2df27a4e58a9b5f039d8f2/triton-3.6.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c723cfb12f6842a0ae94ac307dba7e7a44741d720a40cf0e270ed4a4e3be781", size = 175972180, upload-time = "2026-01-20T16:15:53.664Z" }, @@ -13289,6 +13321,8 @@ resolution-markers = [ "python_full_version >= '3.13' and platform_machine != 'x86_64' and sys_platform == 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train' and extra != 'group-16-cosmos-framework-vllm'", "python_full_version >= '3.13' and platform_machine != 'x86_64' and sys_platform != 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra == 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train' and extra != 'group-16-cosmos-framework-vllm'", "python_full_version >= '3.13' and sys_platform == 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train' and extra != 'group-16-cosmos-framework-vllm'", + "python_full_version >= '3.13' and sys_platform != 'linux' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra == 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train' and extra != 'group-16-cosmos-framework-vllm'", + "python_full_version >= '3.13' and sys_platform == 'darwin' and extra != 'group-16-cosmos-framework-cu128' and extra != 'group-16-cosmos-framework-cu128-train' and extra != 'group-16-cosmos-framework-cu130' and extra != 'group-16-cosmos-framework-cu130-torch213' and extra != 'group-16-cosmos-framework-cu130-torch213-train' and extra != 'group-16-cosmos-framework-cu130-train'", ] wheels = [ { url = "https://download-r2.pytorch.org/whl/triton-3.7.1-cp310-cp310-linux_aarch64.whl", hash = "sha256:7f02d894c176e9b80323c4679049cb12219890027550194550548a04c70b5c2e", upload-time = "2026-06-17T16:37:52Z" }, @@ -13306,9 +13340,15 @@ name = "triton" version = "3.7.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ + "python_full_version == '3.12.*' and sys_platform == 'darwin'", + "python_full_version == '3.11.*' and sys_platform == 'darwin'", + "python_full_version < '3.11' and sys_platform == 'darwin'", "python_full_version == '3.12.*' and sys_platform == 'linux'", + "python_full_version == '3.12.*' and sys_platform != 'darwin' and sys_platform != 'linux'", "python_full_version == '3.11.*' and sys_platform == 'linux'", + "python_full_version == '3.11.*' and sys_platform != 'darwin' and sys_platform != 'linux'", "python_full_version < '3.11' and sys_platform == 'linux'", + "python_full_version < '3.11' and sys_platform != 'darwin' and sys_platform != 'linux'", ] wheels = [ { url = "https://files.pythonhosted.org/packages/ec/ea/629cc37436ca5df93ce98956d09cd2ca1498bfee8ef4972d2fe48b9f958c/triton-3.7.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3daf64305d6cea88d3334c65ebc9bcd0c64c9564a977084366aa768d57cbcf64", size = 184551013, upload-time = "2026-06-17T20:03:37.551Z" }, From 3b56fb8bcac99829e945d07366ca74b51c89791f Mon Sep 17 00:00:00 2001 From: Ramanathan Arunachalam Date: Thu, 1 Oct 2026 19:18:59 +0000 Subject: [PATCH 02/17] build(docker): support immutable non-root training images Preserve runtime permissions, local package installation, and image provenance. Exclude generated Python bytecode from the build context. Signed-off-by: Ramanathan Arunachalam --- .dockerignore | 2 + Dockerfile | 37 ++++++++++++-- docker/dockerfile_test.py | 20 ++++++++ docker/entrypoint.sh | 4 +- docker/write_image_provenance.py | 88 ++++++++++++++++++++++++++++++++ 5 files changed, 145 insertions(+), 6 deletions(-) create mode 100644 docker/dockerfile_test.py create mode 100644 docker/write_image_provenance.py diff --git a/.dockerignore b/.dockerignore index 0dfe444b6..2c1ae741d 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,7 @@ .venv .git +**/__pycache__ +**/*.pyc /checkpoints /datasets /output diff --git a/Dockerfile b/Dockerfile index 74d1e5bcf..91fadaea6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,6 +7,23 @@ ARG CUDA_VERSION=13.0.2 ARG BASE_IMAGE=nvidia/cuda:${CUDA_VERSION}-cudnn-devel-ubuntu24.04 FROM ${BASE_IMAGE} +ARG SOURCE_COMMIT +ARG SOURCE_TREE +ARG SOURCE_DIRTY=1 +ARG BUILD_TIMESTAMP +ARG BASE_IMAGE +ARG CUDA_VERSION +LABEL org.opencontainers.image.revision="${SOURCE_COMMIT}" \ + org.opencontainers.image.created="${BUILD_TIMESTAMP}" \ + com.nvidia.tao.source-tree="${SOURCE_TREE}" \ + com.nvidia.tao.backend="cosmos-framework" +ENV SOURCE_COMMIT="${SOURCE_COMMIT}" \ + SOURCE_TREE="${SOURCE_TREE}" \ + SOURCE_DIRTY="${SOURCE_DIRTY}" \ + BUILD_TIMESTAMP="${BUILD_TIMESTAMP}" \ + PROVENANCE_BASE_IMAGE="${BASE_IMAGE}" \ + CUDA_VERSION="${CUDA_VERSION}" + # Set the DEBIAN_FRONTEND environment variable to avoid interactive prompts during apt operations. ENV DEBIAN_FRONTEND=noninteractive @@ -28,7 +45,8 @@ COPY --from=ghcr.io/astral-sh/uv:0.12.2 /uv /uvx /usr/local/bin/ # Copy from the cache instead of linking since it's a mounted volume ENV UV_LINK_MODE=copy # Cache python downloads -ENV UV_PYTHON_CACHE_DIR=/root/.cache/uv/python +ENV UV_PYTHON_CACHE_DIR=/opt/uv-python-cache \ + UV_PYTHON_INSTALL_DIR=/opt/uv-python # Install just: https://just.systems/man/en/pre-built-binaries.html RUN curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to /usr/local/bin --tag 1.46.0 @@ -40,7 +58,8 @@ WORKDIR /workspace # Install python RUN --mount=type=cache,target=/root/.cache/uv \ --mount=type=bind,source=.python-version,target=.python-version \ - uv python install + uv python install && \ + chmod -R a+rX /opt/uv-python /opt/uv-python-cache # Install into virtual environment RUN echo "$CUDA_VERSION" | sed -E 's/^([0-9]+)\.([0-9]+).*/cu\1\2/' > /root/.cuda-name @@ -49,7 +68,7 @@ RUN --mount=type=cache,target=/root/.cache/uv \ --mount=type=bind,source=pyproject.toml,target=pyproject.toml \ --mount=type=bind,source=.python-version,target=.python-version \ --mount=type=bind,source=packages,target=packages \ - uv sync --locked --no-install-project --no-editable --all-extras --group=$(cat /root/.cuda-name) --group=vllm + uv sync --locked --no-install-project --no-editable --all-extras --group=$(cat /root/.cuda-name)-train ENV PATH="/workspace/.venv/bin:$PATH" # Set to 0 to skip the apex build, which is by far the slowest layer. apex is optional: @@ -66,6 +85,18 @@ RUN --mount=type=cache,target=/root/.cache/uv \ echo "INSTALL_APEX=$INSTALL_APEX, skipping apex"; \ fi +# Package the exact source state after the expensive dependency layers so source +# edits do not rebuild apex. Managed platforms do not require a host bind mount. +COPY . /workspace +RUN --mount=type=cache,target=/root/.cache/uv \ + uv pip install --no-deps . + +RUN /workspace/.venv/bin/python /workspace/docker/write_image_provenance.py && \ + chmod a+rx /workspace /workspace/docker /workspace/docker/entrypoint.sh && \ + chmod -R a+rX /opt/tao /workspace/.venv /workspace/cosmos_framework /workspace && \ + test -x /workspace/docker/entrypoint.sh && \ + test -x /workspace/.venv/bin/python + # Triton bundled ptxas doesn't support latest GPU architectures ENV TRITON_PTXAS_PATH="/usr/local/cuda/bin/ptxas" diff --git a/docker/dockerfile_test.py b/docker/dockerfile_test.py new file mode 100644 index 000000000..f0979e7bf --- /dev/null +++ b/docker/dockerfile_test.py @@ -0,0 +1,20 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: OpenMDW-1.1 + +from pathlib import Path + + +def test_runtime_tree_is_accessible_to_arbitrary_container_users() -> None: + """Pyxis commonly starts the container with the submitting host UID.""" + + dockerfile = (Path(__file__).parents[1] / "Dockerfile").read_text() + assert "chmod a+rx /workspace /workspace/docker /workspace/docker/entrypoint.sh" in dockerfile + assert "chmod -R a+rX /opt/tao /workspace/.venv /workspace/cosmos_framework" in dockerfile + assert "test -x /workspace/docker/entrypoint.sh" in dockerfile + assert "test -x /workspace/.venv/bin/python" in dockerfile + + +def test_entrypoint_never_mutates_the_packaged_python_environment() -> None: + entrypoint = (Path(__file__).parent / "entrypoint.sh").read_text() + assert "pip install" not in entrypoint + assert 'exec "$@"' in entrypoint diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 55f01aee3..2c048ed83 100755 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -5,8 +5,6 @@ # Docker entrypoint script. -set -e - -uv pip install --no-deps -e . || true +set -euo pipefail exec "$@" diff --git a/docker/write_image_provenance.py b/docker/write_image_provenance.py new file mode 100644 index 000000000..fa6b6eb48 --- /dev/null +++ b/docker/write_image_provenance.py @@ -0,0 +1,88 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: OpenMDW-1.1 + +"""Write deterministic source and runtime provenance during an image build.""" + +from __future__ import annotations + +import hashlib +import importlib.metadata +import importlib +import json +import os +import platform +import sys +from pathlib import Path + + +def _sha256(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as stream: + for block in iter(lambda: stream.read(1024 * 1024), b""): + digest.update(block) + return digest.hexdigest() + + +def _version(distribution: str) -> str | None: + try: + return importlib.metadata.version(distribution) + except importlib.metadata.PackageNotFoundError: + return None + + +def main() -> int: + workspace = Path(os.environ.get("PROVENANCE_WORKSPACE", "/workspace")).resolve(strict=True) + output_dir = Path(os.environ.get("PROVENANCE_OUTPUT_DIR", "/opt/tao")).resolve() + output_dir.mkdir(parents=True, exist_ok=True) + roots = [workspace / "cosmos_framework", workspace / "pyproject.toml", workspace / "uv.lock", workspace / "Dockerfile"] + files: list[Path] = [] + for root in roots: + if root.is_file(): + files.append(root) + elif root.is_dir(): + files.extend(path for path in root.rglob("*") if path.is_file() and "__pycache__" not in path.parts) + entries = [(str(path.relative_to(workspace)), _sha256(path)) for path in sorted(files)] + manifest_text = "".join(f"{digest} {name}\n" for name, digest in entries) + (output_dir / "source-manifest.sha256").write_text(manifest_text, encoding="utf-8") + manifest_sha256 = hashlib.sha256(manifest_text.encode()).hexdigest() + payload = { + "schema_version": 1, + "repository": "cosmos-framework", + "repository_commit": os.environ.get("SOURCE_COMMIT"), + "repository_tree": os.environ.get("SOURCE_TREE"), + "source_dirty": os.environ.get("SOURCE_DIRTY") == "1", + "repositories": { + "cosmos-framework": { + "commit": os.environ.get("SOURCE_COMMIT"), + "tree": os.environ.get("SOURCE_TREE"), + "dirty": os.environ.get("SOURCE_DIRTY") == "1", + } + }, + "source_manifest_sha256": manifest_sha256, + "dependency_lock_sha256": _sha256(workspace / "uv.lock"), + "dockerfile_sha256": _sha256(workspace / "Dockerfile"), + "build_timestamp": os.environ.get("BUILD_TIMESTAMP"), + "base_image": os.environ.get("PROVENANCE_BASE_IMAGE"), + "cuda_build_version": os.environ.get("CUDA_VERSION"), + "python": {"executable": sys.executable, "version": platform.python_version()}, + "packages": { + name: _version(name) + for name in ("cosmos-framework", "torch", "transformers", "torchcodec", "PyNvVideoCodec", "peft") + }, + "package_locations": { + name: str(Path(importlib.import_module(name).__file__).resolve()) + for name in ("cosmos_framework", "torch", "transformers") + }, + } + (output_dir / "image-provenance.json").write_text( + json.dumps(payload, indent=2, sort_keys=True) + "\n", encoding="utf-8" + ) + if payload["source_dirty"]: + raise RuntimeError("A reproducibility image cannot be built from a dirty source tree") + if not payload["repository_commit"] or not payload["repository_tree"] or not payload["build_timestamp"]: + raise RuntimeError("SOURCE_COMMIT, SOURCE_TREE, and BUILD_TIMESTAMP build arguments are required") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) From 663d8cffe4d594f50537e4e2dddf7a3d8e92eb2f Mon Sep 17 00:00:00 2001 From: Ramanathan Arunachalam Date: Thu, 1 Oct 2026 19:18:59 +0000 Subject: [PATCH 03/17] fix(runtime): restore public exports and respect process resources Restore model export declarations, honor process CPU affinity, and limit benchmark NCCL environment defaults to CLI startup. --- .../generator/mot/qwen3_vl_unified_mot.py | 3 +- .../generator/tokenizers/lidar/__init__.py | 5 +- .../tokenizers/lidar/network/__init__.py | 5 +- cosmos_framework/utils/distributed.py | 4 +- cosmos_framework/utils/distributed_test.py | 48 +++++++++++++++++++ .../utils/generator/cost_model/benchmark.py | 20 ++++---- 6 files changed, 68 insertions(+), 17 deletions(-) diff --git a/cosmos_framework/model/generator/mot/qwen3_vl_unified_mot.py b/cosmos_framework/model/generator/mot/qwen3_vl_unified_mot.py index 1c25c453a..25b26283e 100644 --- a/cosmos_framework/model/generator/mot/qwen3_vl_unified_mot.py +++ b/cosmos_framework/model/generator/mot/qwen3_vl_unified_mot.py @@ -18,5 +18,6 @@ Qwen3VLTextConfig, Qwen3VLTextForCausalLM, Qwen3VLTextModel, - Qwen3VLTextMoTDecoderLayer, ) + +Qwen3VLTextMoTDecoderLayer = MoTDecoderLayer diff --git a/cosmos_framework/model/generator/tokenizers/lidar/__init__.py b/cosmos_framework/model/generator/tokenizers/lidar/__init__.py index 09ef7ea81..5a075d848 100644 --- a/cosmos_framework/model/generator/tokenizers/lidar/__init__.py +++ b/cosmos_framework/model/generator/tokenizers/lidar/__init__.py @@ -5,7 +5,10 @@ from __future__ import annotations -from typing import Any +from typing import TYPE_CHECKING, Any + +if TYPE_CHECKING: + from cosmos_framework.model.generator.tokenizers.lidar.lidar_tokenizer_v1 import LidarTokenizerV1Interface __all__ = [ "LidarTokenizerV1Interface", diff --git a/cosmos_framework/model/generator/tokenizers/lidar/network/__init__.py b/cosmos_framework/model/generator/tokenizers/lidar/network/__init__.py index 1697f3eaf..6f855c43a 100644 --- a/cosmos_framework/model/generator/tokenizers/lidar/network/__init__.py +++ b/cosmos_framework/model/generator/tokenizers/lidar/network/__init__.py @@ -5,7 +5,10 @@ from __future__ import annotations -from typing import Any +from typing import TYPE_CHECKING, Any + +if TYPE_CHECKING: + from cosmos_framework.model.generator.tokenizers.lidar.network.transformer_vae import TransformerVAE __all__ = ["TransformerVAE"] diff --git a/cosmos_framework/utils/distributed.py b/cosmos_framework/utils/distributed.py index 05b7b4c1d..ccf8f0ad5 100644 --- a/cosmos_framework/utils/distributed.py +++ b/cosmos_framework/utils/distributed.py @@ -23,8 +23,8 @@ import torch.distributed as dist from torch.distributed import get_process_group_ranks -from cosmos_framework.utils.flags import INTERNAL from cosmos_framework.utils.device import Device +from cosmos_framework.utils.flags import INTERNAL if dist.is_available(): from torch.distributed.distributed_c10d import _get_default_group @@ -69,7 +69,7 @@ def init(store: dist.Store | None = None, backend: str | None = None) -> int | N try: device = Device(local_rank) _set_gpu_cpu_affinity(device) - except pynvml.NVMLError as e: + except (pynvml.NVMLError, OSError) as e: log.warning(f"Failed to set device affinity: {e}") # Set up distributed communication. CPU checkpoint conversion needs Gloo # because NCCL cannot synchronize CPU-resident tokenizer or model tensors. diff --git a/cosmos_framework/utils/distributed_test.py b/cosmos_framework/utils/distributed_test.py index 962a3e814..362981ca1 100644 --- a/cosmos_framework/utils/distributed_test.py +++ b/cosmos_framework/utils/distributed_test.py @@ -30,6 +30,7 @@ def test_init_uses_gloo_backend_for_cpu(monkeypatch: pytest.MonkeyPatch) -> None "Device", lambda _local_rank: SimpleNamespace(get_cpu_affinity=lambda: [0]), ) + monkeypatch.setattr(distributed.os, "sched_getaffinity", lambda _pid: {0, 1}) monkeypatch.setattr(distributed.os, "sched_setaffinity", lambda _pid, _affinity: None) monkeypatch.setattr(distributed.torch.cuda, "set_device", lambda _local_rank: None) @@ -38,6 +39,53 @@ def test_init_uses_gloo_backend_for_cpu(monkeypatch: pytest.MonkeyPatch) -> None assert init_process_group.call_args.kwargs["backend"] == "gloo" +def test_init_intersects_nvml_affinity_with_slurm_cpuset(monkeypatch: pytest.MonkeyPatch) -> None: + set_affinity = Mock() + monkeypatch.setenv("COSMOS_DEVICE", "cpu") + monkeypatch.setenv("TORCH_NCCL_BLOCKING_WAIT", "0") + monkeypatch.setenv("TORCH_NCCL_ASYNC_ERROR_HANDLING", "1") + monkeypatch.setattr(distributed, "INTERNAL", False) + monkeypatch.setattr(distributed.dist, "is_initialized", lambda: False) + monkeypatch.setattr(distributed.dist, "is_available", lambda: False) + monkeypatch.setattr(distributed.pynvml, "nvmlInit", lambda: None) + monkeypatch.setattr( + distributed, + "Device", + lambda _local_rank: SimpleNamespace(get_cpu_affinity=lambda: [0, 32, 33]), + ) + monkeypatch.setattr(distributed.os, "sched_getaffinity", lambda _pid: {32, 33, 40}) + monkeypatch.setattr(distributed.os, "sched_setaffinity", set_affinity) + + distributed.init() + + set_affinity.assert_called_once_with(0, {32, 33}) + + +def test_init_logs_empty_nvml_slurm_affinity_intersection(monkeypatch: pytest.MonkeyPatch) -> None: + warning = Mock() + monkeypatch.setenv("COSMOS_DEVICE", "cpu") + monkeypatch.setenv("TORCH_NCCL_BLOCKING_WAIT", "0") + monkeypatch.setenv("TORCH_NCCL_ASYNC_ERROR_HANDLING", "1") + monkeypatch.setattr(distributed, "INTERNAL", False) + monkeypatch.setattr(distributed.dist, "is_initialized", lambda: False) + monkeypatch.setattr(distributed.dist, "is_available", lambda: False) + monkeypatch.setattr(distributed.pynvml, "nvmlInit", lambda: None) + monkeypatch.setattr( + distributed, + "Device", + lambda _local_rank: SimpleNamespace(get_cpu_affinity=lambda: [0, 1]), + ) + monkeypatch.setattr(distributed.os, "sched_getaffinity", lambda _pid: {32, 33}) + monkeypatch.setattr(distributed.os, "sched_setaffinity", Mock()) + monkeypatch.setattr(distributed.log, "warning", warning) + + distributed.init() + + warning.assert_called_once_with( + "No GPU-local CPU is available in the current CPU affinity; retaining the allocated set." + ) + + def _contains_tensor(value: Any) -> bool: if isinstance(value, torch.Tensor): return True diff --git a/cosmos_framework/utils/generator/cost_model/benchmark.py b/cosmos_framework/utils/generator/cost_model/benchmark.py index 1fb2cde1e..379c5af5e 100644 --- a/cosmos_framework/utils/generator/cost_model/benchmark.py +++ b/cosmos_framework/utils/generator/cost_model/benchmark.py @@ -85,9 +85,9 @@ import torch.distributed as dist import tyro -from cosmos_framework.utils.config import load_config -from cosmos_framework.utils.lazy_config import instantiate +from cosmos_framework.data.generator.sequence_packing import SequencePlan from cosmos_framework.utils import distributed, log, misc +from cosmos_framework.utils.config import load_config from cosmos_framework.utils.generator.cost_model.estimator import ( PEAK_TFLOPS_BY_DEVICE, BucketMeasurement, @@ -98,17 +98,8 @@ flops_per_sample, ) from cosmos_framework.utils.generator.cost_model.spec import SampleSpec -from cosmos_framework.data.generator.sequence_packing import SequencePlan from cosmos_framework.utils.generator.method_timer import MethodTimer - -# NCCL reads this at communicator creation (inside distributed.init() below), so it must -# be set before that call, not just before the timed region. Production sets the same -# value for real jobs via submit_helper.py's SlurmExecutor env (NVLink SHARP causes job -# failures on GB200 clusters); this benchmark is launched directly with torchrun rather -# than through that launcher, so without this it would default to NVLS enabled and time -# a communication pattern real training never runs. setdefault so an explicit -# NCCL_NVLS_ENABLE in the launching shell still wins. -os.environ.setdefault("NCCL_NVLS_ENABLE", "0") +from cosmos_framework.utils.lazy_config import instantiate CONFIG_PATH = "cosmos_framework/configs/base/config.py" DEFAULT_EXPERIMENT = "t2w_mot_exp306_006_qwen3_vl_8b_ratio_sample_balancing" @@ -695,6 +686,11 @@ def main(args: BenchmarkConfig) -> None: if args.log_recompiles: torch._logging.set_logs(recompiles=True) + # NCCL reads this when the communicator is created. Match the training + # launcher's NVLS policy for this CLI, while allowing an explicit shell + # override. Importing the reusable benchmark helpers must not change the + # calling application's process-wide NCCL configuration. + os.environ.setdefault("NCCL_NVLS_ENABLE", "0") distributed.init() world_size = dist.get_world_size() if dist.is_initialized() else 1 rank = dist.get_rank() if dist.is_initialized() else 0 From 54ae603337e44bfd23a8a61a1d67755b5b3bad34 Mon Sep 17 00:00:00 2001 From: Ramanathan Arunachalam Date: Thu, 1 Oct 2026 19:18:59 +0000 Subject: [PATCH 04/17] feat(data): add resumable video batching and worker prefetch Normalize distributor seeds, preserve contiguous batches across epochs, and support bounded sequences with spawned preprocessing workers. Co-Authored-By: Claude Fable 5 --- .../data/generator/dataflow/__init__.py | 15 +- .../data/generator/dataflow/base.py | 4 + .../data/generator/dataflow/batchers.py | 46 +++++ .../data/generator/dataflow/distributors.py | 5 +- .../data/generator/dataflow/loader.py | 93 +++++++--- .../data/generator/dataflow/resume_test.py | 168 ++++++++++++++++++ .../utils/generator/torchcodec_video.py | 6 +- 7 files changed, 307 insertions(+), 30 deletions(-) diff --git a/cosmos_framework/data/generator/dataflow/__init__.py b/cosmos_framework/data/generator/dataflow/__init__.py index 08070950e..d98d2173f 100644 --- a/cosmos_framework/data/generator/dataflow/__init__.py +++ b/cosmos_framework/data/generator/dataflow/__init__.py @@ -12,14 +12,25 @@ RawItemProcessor, SampleBatcher, ) -from cosmos_framework.data.generator.dataflow.batchers import PoolPackingBatcher, SequentialPackingBatcher, SimpleBatcher +from cosmos_framework.data.generator.dataflow.batchers import ( + ContiguousBatcher, + PoolPackingBatcher, + SequentialPackingBatcher, + SimpleBatcher, +) from cosmos_framework.data.generator.dataflow.collators import DefaultBatchCollator, VFMListCollator -from cosmos_framework.data.generator.dataflow.distributors import IterableDistributor, MapDistributor, MixtureDistributor, RankPartitionedDistributor +from cosmos_framework.data.generator.dataflow.distributors import ( + IterableDistributor, + MapDistributor, + MixtureDistributor, + RankPartitionedDistributor, +) from cosmos_framework.data.generator.dataflow.loader import CosmosDataLoader, JointCosmosDataLoader from cosmos_framework.data.generator.dataflow.processors import IdentityProcessor __all__ = [ "BatchCollator", + "ContiguousBatcher", "CosmosDataLoader", "JointCosmosDataLoader", "DataDistributor", diff --git a/cosmos_framework/data/generator/dataflow/base.py b/cosmos_framework/data/generator/dataflow/base.py index 0be77a5d0..53f40eed6 100644 --- a/cosmos_framework/data/generator/dataflow/base.py +++ b/cosmos_framework/data/generator/dataflow/base.py @@ -47,6 +47,10 @@ def process(self, item: Any) -> dict: class SampleBatcher(ABC): """Consumes a stream of samples and yields groups (the selection strategy).""" + # Resume cursors may use the final sample only when the batcher guarantees + # that yielded groups preserve the distributor stream order. + preserves_source_order: bool = False + @abstractmethod def batches(self, samples: Iterator[dict]) -> Iterator[list[dict]]: """Pull from ``samples``; yield one ``list[dict]`` per batch.""" diff --git a/cosmos_framework/data/generator/dataflow/batchers.py b/cosmos_framework/data/generator/dataflow/batchers.py index 699b21a09..241a0b51a 100644 --- a/cosmos_framework/data/generator/dataflow/batchers.py +++ b/cosmos_framework/data/generator/dataflow/batchers.py @@ -15,6 +15,8 @@ class SimpleBatcher(SampleBatcher): """Fixed-size batching — stock DataLoader behavior. Never needs sample_size.""" + preserves_source_order = True + def __init__(self, batch_size: int, drop_last: bool = False): if batch_size < 1: raise ValueError(f"batch_size must be >= 1, got {batch_size}") @@ -32,6 +34,47 @@ def batches(self, samples: Iterator[dict]) -> Iterator[list[dict]]: yield buf +class ContiguousBatcher(SimpleBatcher): + """Resume-safe fixed-size batches with the VLM ``max_batch_size`` API. + + Unlike pool packing, this batcher never reorders the map-style distributor + stream. The final sample position therefore remains an exact checkpoint + cursor for multi-sample batches. + """ + + def __init__( + self, + max_batch_size: int = 1, + max_tokens: int | None = None, + drop_last: bool = False, + ): + if max_tokens is not None and int(max_tokens) < 1: + raise ValueError("max_tokens must be positive when configured") + self.max_batch_size = max_batch_size + # Unlike PoolPackingBatcher, this is a per-sample sequence ceiling. + # The fixed contiguous batch size remains authoritative so the global + # batch and optimizer-update count do not change with token lengths. + self.max_tokens = int(max_tokens) if max_tokens is not None else None + super().__init__(batch_size=max_batch_size, drop_last=drop_last) + + def batches(self, samples: Iterator[dict]) -> Iterator[list[dict]]: + if self.max_tokens is None: + yield from super().batches(samples) + return + + def checked() -> Iterator[dict]: + for sample in samples: + input_ids = sample.get("input_ids") + if input_ids is not None and len(input_ids) > self.max_tokens: + raise ValueError( + "contiguous batch sample exceeds max_tokens: " + f"{len(input_ids)} > {self.max_tokens}" + ) + yield sample + + yield from super().batches(checked()) + + class _Modality(Enum): IMAGE = "image" VIDEO = "video" @@ -197,6 +240,8 @@ class SequentialPackingBatcher(SampleBatcher): sound params). """ + preserves_source_order = True + def __init__( self, max_sequence_length: Optional[int] = None, @@ -234,6 +279,7 @@ def sample_size(self, sample: dict) -> int: # - list of ints → len(text_token_ids) # - 2-D tensor [1,S] → shape[1] (mirrors original .shape[1] branch) import torch as _torch + text_token_ids = sample["text_token_ids"] if isinstance(text_token_ids, list): if len(text_token_ids) > 0 and isinstance(text_token_ids[0], _torch.Tensor): diff --git a/cosmos_framework/data/generator/dataflow/distributors.py b/cosmos_framework/data/generator/dataflow/distributors.py index 6c1a54671..4210035c2 100644 --- a/cosmos_framework/data/generator/dataflow/distributors.py +++ b/cosmos_framework/data/generator/dataflow/distributors.py @@ -48,7 +48,10 @@ def __init__( name: str = "", ): self._dataset = dataset - self._seed = seed + # OmegaConf environment interpolation produces a string even when the + # environment value is numeric. Normalize at this typed boundary so + # epoch arithmetic and torch.Generator seeding remain deterministic. + self._seed = int(seed) self._shuffle = shuffle self._name = name diff --git a/cosmos_framework/data/generator/dataflow/loader.py b/cosmos_framework/data/generator/dataflow/loader.py index edf164bc0..3b5f68dff 100644 --- a/cosmos_framework/data/generator/dataflow/loader.py +++ b/cosmos_framework/data/generator/dataflow/loader.py @@ -8,11 +8,13 @@ from __future__ import annotations +from concurrent.futures import ThreadPoolExecutor +from itertools import islice + +import numpy as np import torch import torch.utils.data -import numpy as np -from cosmos_framework.utils import log from cosmos_framework.data.generator.dataflow.base import ( BatchCollator, DataDistributor, @@ -21,6 +23,7 @@ ) from cosmos_framework.data.generator.dataflow.batchers import SimpleBatcher from cosmos_framework.data.generator.dataflow.collators import DefaultBatchCollator +from cosmos_framework.utils import log class _DataflowIterableDataset(torch.utils.data.IterableDataset): @@ -34,6 +37,7 @@ def __init__( collator: BatchCollator, dp_rank: int, dp_world_size: int, + processing_threads: int, ): super().__init__() self._distributor = distributor @@ -42,40 +46,60 @@ def __init__( self._collator = collator self._dp_rank = dp_rank self._dp_world_size = dp_world_size + self._processing_threads = processing_threads def __iter__(self): info = torch.utils.data.get_worker_info() worker_id, num_workers = (info.id, info.num_workers) if info else (0, 1) raw = self._distributor.stream(self._dp_rank, self._dp_world_size, worker_id, num_workers) + def _process_one(item): + if isinstance(item, dict): + meta = {k: item.pop(k) for k in list(item) if k.startswith("_dp_")} + else: + meta = {} + sample = self._processor.process(item) + if meta and isinstance(sample, dict): + sample.update(meta) + return sample + def _processed(): - for item in raw: - if isinstance(item, dict): - meta = {k: item.pop(k) for k in list(item) if k.startswith("_dp_")} - else: - meta = {} - s = self._processor.process(item) - if meta and isinstance(s, dict): - s.update(meta) - yield s + if self._processing_threads == 1: + for item in raw: + yield _process_one(item) + return + + # Keep one small, bounded in-process pool per DataLoader worker. + # executor.map preserves source order, so sharding, packing, and + # checkpoint/resume positions remain identical to serial processing. + with ThreadPoolExecutor(max_workers=self._processing_threads) as executor: + while True: + chunk = list(islice(raw, self._processing_threads)) + if not chunk: + return + yield from executor.map(_process_one, chunk) for group in self._batcher.batches(_processed()): has_meta = bool(group) and isinstance(group[0], dict) and "_dp_epoch" in group[0] if has_meta: epochs = [s["_dp_epoch"] for s in group] positions = [s["_dp_stream_pos"] for s in group] - max_epoch = max(epochs) - max_pos = max(positions) - # Resume records (max_epoch, max_pos) and fast-forwards to max_pos+1 — - # bit-for-bit with the legacy collate_batch. That is gap-free only when - # this batch is a single sample (max_batch_size=1, all live recipes) or a - # single-epoch contiguous run (sequential packing). A reordering batcher - # (pool packing) at batch_size>1, or a batch spanning an epoch boundary, - # would leave buffered lower positions unrecorded and skip them on resume. - # Fail loudly rather than silently drop samples in that unsupported combo. - if len(group) > 1: - contiguous = min(epochs) == max_epoch and sorted(positions) == list( - range(min(positions), max_pos + 1) + if self._batcher.preserves_source_order: + # The final emitted sample is the exact stream cursor even + # when a large fixed batch spans one or more short epochs. + # Independent maxima are invalid across an epoch boundary + # because positions restart at zero in each epoch. + cursor_epoch = group[-1]["_dp_epoch"] + cursor_pos = group[-1]["_dp_stream_pos"] + else: + cursor_epoch = max(epochs) + cursor_pos = max(positions) + # A reordering batcher can leave lower positions buffered when + # yielding a multi-sample group. Preserve the existing strict + # rejection for that unsupported resume combination. + if len(group) > 1 and not self._batcher.preserves_source_order: + contiguous = min(epochs) == cursor_epoch and sorted(positions) == list( + range(min(positions), cursor_pos + 1) ) if not contiguous: raise ValueError( @@ -88,8 +112,8 @@ def _processed(): clean = [{k: v for k, v in s.items() if not k.startswith("_dp_")} for s in group] batch = self._collator.collate(clean) batch["sample_worker_id"] = torch.tensor([worker_id] * len(group)) - batch["sample_epoch"] = torch.tensor([max_epoch] * len(group)) - batch["sample_index"] = torch.tensor([max_pos] * len(group)) + batch["sample_epoch"] = torch.tensor([cursor_epoch] * len(group)) + batch["sample_index"] = torch.tensor([cursor_pos] * len(group)) else: batch = self._collator.collate(group) yield batch @@ -116,6 +140,8 @@ def __init__( prefetch_factor: int | None = None, persistent_workers: bool = False, pin_memory: bool = False, + multiprocessing_context: str | None = None, + processing_threads: int = 1, parallel_dims=None, ): if batch_size is not None and batcher is not None: @@ -128,6 +154,20 @@ def __init__( batcher = SimpleBatcher(batch_size=batch_size) if collator is None: collator = DefaultBatchCollator() + num_workers = int(num_workers) + processing_threads = int(processing_threads) + if prefetch_factor is not None: + prefetch_factor = int(prefetch_factor) + if prefetch_factor < 1: + raise ValueError( + "CosmosDataLoader: prefetch_factor must be >= 1 when configured, " + f"got {prefetch_factor}" + ) + if processing_threads < 1: + raise ValueError( + "CosmosDataLoader: processing_threads must be >= 1, " + f"got {processing_threads}" + ) if parallel_dims is not None: dp_rank, dp_world_size = parallel_dims.dp_coord @@ -150,6 +190,7 @@ def __init__( collator=collator, dp_rank=dp_rank, dp_world_size=dp_world_size, + processing_threads=processing_threads, ) from cosmos_framework.data.generator.dataflow.distributors import MapDistributor @@ -176,6 +217,8 @@ def __init__( ) if num_workers > 0 and prefetch_factor is not None: loader_kwargs["prefetch_factor"] = prefetch_factor + if num_workers > 0 and multiprocessing_context is not None: + loader_kwargs["multiprocessing_context"] = multiprocessing_context super().__init__(dataset, batch_size=None, **loader_kwargs) diff --git a/cosmos_framework/data/generator/dataflow/resume_test.py b/cosmos_framework/data/generator/dataflow/resume_test.py index 2f3a67a86..64dc74692 100644 --- a/cosmos_framework/data/generator/dataflow/resume_test.py +++ b/cosmos_framework/data/generator/dataflow/resume_test.py @@ -6,13 +6,19 @@ from __future__ import annotations +import threading +from itertools import islice + +import pytest import torch from cosmos_framework.callbacks.cosmos_dataloader_state import CosmosDataLoaderStateCallback from cosmos_framework.data.generator.dataflow import ( + ContiguousBatcher, CosmosDataLoader, IdentityProcessor, MapDistributor, + RawItemProcessor, ) @@ -56,3 +62,165 @@ def test_resume_continues_without_dup_or_skip(): it2 = iter(loader2) # one iterator: env-var fast-forward happens once, then continues resumed = [next(it2)["id"].item() for _ in range(3)] assert resumed == [5, 6, 7] + + +def test_contiguous_multisample_batches_resume_without_dup_or_skip(): + callback = CosmosDataLoaderStateCallback() + loader = CosmosDataLoader( + distributor=MapDistributor(_IdDS(20), shuffle=False), + processor=IdentityProcessor(), + batcher=ContiguousBatcher(max_batch_size=4), + num_workers=0, + ) + first = next(iter(loader)) + callback._update_state_from_batch(first) + + assert first["id"].tolist() == [0, 1, 2, 3] + assert callback.state_dict()[0]["index"] == 3 + + resumed_callback = CosmosDataLoaderStateCallback() + resumed_callback.load_state_dict(callback.state_dict()) + resumed_loader = CosmosDataLoader( + distributor=MapDistributor(_IdDS(20), shuffle=False), + processor=IdentityProcessor(), + batcher=ContiguousBatcher(max_batch_size=4), + num_workers=0, + ) + + assert next(iter(resumed_loader))["id"].tolist() == [4, 5, 6, 7] + + +def test_contiguous_batch_crossing_epochs_stamps_last_stream_cursor(): + callback = CosmosDataLoaderStateCallback() + loader = CosmosDataLoader( + distributor=MapDistributor(_IdDS(2), shuffle=False), + processor=IdentityProcessor(), + batcher=ContiguousBatcher(max_batch_size=4), + num_workers=0, + ) + + first = next(iter(loader)) + callback._update_state_from_batch(first) + + assert first["id"].tolist() == [0, 1, 0, 1] + assert first["sample_epoch"].tolist() == [1, 1, 1, 1] + assert first["sample_index"].tolist() == [1, 1, 1, 1] + assert callback.state_dict()[0] == {"epoch": 1, "index": 1} + + resumed_callback = CosmosDataLoaderStateCallback() + resumed_callback.load_state_dict(callback.state_dict()) + resumed_loader = CosmosDataLoader( + distributor=MapDistributor(_IdDS(2), shuffle=False), + processor=IdentityProcessor(), + batcher=ContiguousBatcher(max_batch_size=4), + num_workers=0, + ) + resumed = next(iter(resumed_loader)) + + assert resumed["id"].tolist() == [0, 1, 0, 1] + assert resumed["sample_epoch"].tolist() == [3, 3, 3, 3] + assert resumed["sample_index"].tolist() == [1, 1, 1, 1] + + +def test_contiguous_batcher_sequence_ceiling_preserves_fixed_batch_size(): + batcher = ContiguousBatcher(max_batch_size=3, max_tokens=4) + samples = iter( + [ + {"id": 0, "input_ids": [1, 2]}, + {"id": 1, "input_ids": [1, 2, 3, 4]}, + {"id": 2, "input_ids": [1]}, + ] + ) + assert [[item["id"] for item in batch] for batch in batcher.batches(samples)] == [ + [0, 1, 2] + ] + + +def test_contiguous_batcher_rejects_sample_over_sequence_ceiling(): + batcher = ContiguousBatcher(max_batch_size=2, max_tokens=3) + with pytest.raises(ValueError, match="exceeds max_tokens"): + list(batcher.batches(iter([{"input_ids": [1, 2, 3, 4]}]))) + + +def test_map_distributor_normalizes_environment_style_seed_string(): + distributor = MapDistributor(_IdDS(4), shuffle=True, seed="42") + + assert distributor._seed == 42 + first = [item["id"].item() for item in islice(distributor.stream(0, 1, 0, 1), 4)] + second = [ + item["id"].item() for item in islice(MapDistributor(_IdDS(4), shuffle=True, seed=42).stream(0, 1, 0, 1), 4) + ] + assert first == second + + +class _ConcurrentIdentityProcessor(RawItemProcessor): + def __init__(self, participants: int): + self._barrier = threading.Barrier(participants, timeout=2) + self._lock = threading.Lock() + self.active = 0 + self.peak = 0 + + def process(self, item): + with self._lock: + self.active += 1 + self.peak = max(self.peak, self.active) + self._barrier.wait() + with self._lock: + self.active -= 1 + return item + + +def test_processing_threads_preserve_order_and_run_concurrently(): + processor = _ConcurrentIdentityProcessor(participants=4) + loader = CosmosDataLoader( + distributor=MapDistributor(_IdDS(8), shuffle=False), + processor=processor, + batch_size=1, + num_workers=0, + processing_threads="4", + ) + + batches = list(islice(loader, 4)) + + assert [batch["id"].item() for batch in batches] == [0, 1, 2, 3] + assert processor.peak == 4 + + +def test_processing_threads_rejects_zero(): + with pytest.raises(ValueError, match="processing_threads"): + CosmosDataLoader( + distributor=MapDistributor(_IdDS(1), shuffle=False), + processor=IdentityProcessor(), + batch_size=1, + processing_threads=0, + ) + + +def test_spawn_prefetch_is_enabled_only_with_workers(): + worker_loader = CosmosDataLoader( + distributor=MapDistributor(_IdDS(4), shuffle=False), + processor=IdentityProcessor(), + batch_size=1, + num_workers="1", + prefetch_factor="2", + persistent_workers=True, + multiprocessing_context="spawn", + ) + assert worker_loader.num_workers == 1 + assert worker_loader.prefetch_factor == 2 + assert worker_loader.persistent_workers is True + assert worker_loader.multiprocessing_context.get_start_method() == "spawn" + + inline_loader = CosmosDataLoader( + distributor=MapDistributor(_IdDS(4), shuffle=False), + processor=IdentityProcessor(), + batch_size=1, + num_workers=0, + prefetch_factor=2, + persistent_workers=True, + multiprocessing_context="spawn", + ) + assert inline_loader.num_workers == 0 + assert inline_loader.prefetch_factor is None + assert inline_loader.persistent_workers is False + assert inline_loader.multiprocessing_context is None diff --git a/cosmos_framework/utils/generator/torchcodec_video.py b/cosmos_framework/utils/generator/torchcodec_video.py index bb1f1df7f..ed5e7a0f3 100644 --- a/cosmos_framework/utils/generator/torchcodec_video.py +++ b/cosmos_framework/utils/generator/torchcodec_video.py @@ -143,6 +143,7 @@ def __init__( resize_size=resize_size, output_dtype=output_dtype, ) + self.last_output_device: str | None = None self.metadata = _metadata_from_frame(self._decoder, include_dimensions=include_dimensions) def __len__(self) -> int: @@ -155,8 +156,9 @@ def get_avg_fps(self) -> float: return self.metadata.average_fps def get_frames_tchw_uint8(self, indices: list[int]) -> torch.Tensor: - frames_tchw = self._decoder.get_frames_at(indices).data.cpu() # [T,C,H,W] - return frames_tchw # [T,C,H,W] + frames_tchw = self._decoder.get_frames_at(indices).data # [T,C,H,W] + self.last_output_device = str(frames_tchw.device) + return frames_tchw.cpu() # [T,C,H,W] def get_frames_nhwc_uint8(self, indices: list[int]) -> np.ndarray: frames_tchw = self.get_frames_tchw_uint8(indices) # [T,C,H,W] From 4474f704d0b2c79a8c7b4b6f10d79297088ba92f Mon Sep 17 00:00:00 2001 From: Ramanathan Arunachalam Date: Thu, 1 Oct 2026 19:18:59 +0000 Subject: [PATCH 05/17] fix(video): preserve shared metadata, frame clocks, and modality Use the shared video metadata probe and preserve Qwen timestamps and modality metadata throughout preprocessing. --- .../augmentors/reasoner/bytes_to_media.py | 7 +++-- .../augmentors/reasoner/timestamp.py | 11 +++++-- .../generator/processors/VIDEO_TIMESTAMPS.md | 4 +-- .../data/generator/processors/__init__.py | 12 +------ .../generator/processors/qwen3vl_processor.py | 31 +++++++++++++------ 5 files changed, 36 insertions(+), 29 deletions(-) diff --git a/cosmos_framework/data/generator/augmentors/reasoner/bytes_to_media.py b/cosmos_framework/data/generator/augmentors/reasoner/bytes_to_media.py index 5d9d6fdf0..f6852229c 100644 --- a/cosmos_framework/data/generator/augmentors/reasoner/bytes_to_media.py +++ b/cosmos_framework/data/generator/augmentors/reasoner/bytes_to_media.py @@ -17,16 +17,17 @@ from PIL import Image, UnidentifiedImageError from torchcodec.decoders import AudioDecoder, VideoDecoder +from cosmos_framework.data.generator.processors.qwen3vl_processor import Qwen3VLProcessor +from cosmos_framework.data.generator.reasoner.video_decoder_qwen import VideoTemporalMode, _video_decoder_qwen_func from cosmos_framework.data.imaginaire.webdataset.augmentors.augmentor import Augmentor from cosmos_framework.utils import log -from cosmos_framework.data.generator.reasoner.video_decoder_qwen import VideoTemporalMode, _video_decoder_qwen_func -from cosmos_framework.data.generator.processors.qwen3vl_processor import Qwen3VLProcessor from cosmos_framework.utils.generator.source_video_timing import ( SOURCE_VIDEO_TIMING_KEY, require_source_pts_processor, validate_source_video_timing, validate_video_timestamp_mode, ) +from cosmos_framework.utils.generator.torchcodec_video import probe_video from cosmos_framework.utils.generator.video_preprocess import tensor_to_pil_images from cosmos_framework.utils.generator.video_source_metadata import VIDEO_METADATA_KEY @@ -168,7 +169,7 @@ def _probe_video_duration_seconds( ) -> float | None: """Probe the effective video duration in seconds used for proportional budget allocation.""" try: - metadata = VideoDecoder(video_bytes, num_ffmpeg_threads=self.video_decoder_params["num_threads"]).metadata + metadata = probe_video(video_bytes, num_threads=self.video_decoder_params["num_threads"]) frame_count = ( max(end_frame - start_frame, 0) if start_frame is not None and end_frame is not None diff --git a/cosmos_framework/data/generator/augmentors/reasoner/timestamp.py b/cosmos_framework/data/generator/augmentors/reasoner/timestamp.py index 73b17fb40..986544f67 100644 --- a/cosmos_framework/data/generator/augmentors/reasoner/timestamp.py +++ b/cosmos_framework/data/generator/augmentors/reasoner/timestamp.py @@ -35,9 +35,14 @@ class _TimestampProcessor(Protocol): def compute_timestamps(frame_index: int, fps: float, processor: _TimestampProcessor | None) -> float: - if processor is not None and "Qwen3" in processor.name: - frame_index_start = frame_index // processor.merge_size * processor.merge_size - frame_index_end = frame_index_start + processor.merge_size - 1 + if processor is not None and ( + getattr(processor, "USES_TEMPORAL_PATCH_TIMESTAMPS", False) or "Qwen3" in processor.name + ): + # Snapshot paths may be arbitrary hashes. Use the processor's temporal + # contract, not its directory name or spatial merge size, for this clock. + patch_size = getattr(processor, "temporal_patch_size", processor.merge_size) + frame_index_start = frame_index // patch_size * patch_size + frame_index_end = frame_index_start + patch_size - 1 timestamps_start = frame_index_start / fps timestamps_end = frame_index_end / fps timestamps = (timestamps_start + timestamps_end) / 2 diff --git a/cosmos_framework/data/generator/processors/VIDEO_TIMESTAMPS.md b/cosmos_framework/data/generator/processors/VIDEO_TIMESTAMPS.md index df3ca2331..1d8f7c5bb 100644 --- a/cosmos_framework/data/generator/processors/VIDEO_TIMESTAMPS.md +++ b/cosmos_framework/data/generator/processors/VIDEO_TIMESTAMPS.md @@ -26,8 +26,8 @@ The images selected by the sampler are unchanged. This matches Qwen's TorchCodec/Decord index/FPS convention. It is distinct from using decoder presentation timestamps (PTS): those can differ on variable-rate -video. The optional crop-relative `source_pts` policy is documented in -[Video timestamp policies](../../docs/reasoner/source_video_timestamps.md). +video. The optional crop-relative `source_pts` policy is validated in +[source_video_timing.py](../../../utils/generator/source_video_timing.py). Existing manually supplied frames without source metadata retain their local frame-sequence/FPS fallback. Other processor families retain their existing decoder diff --git a/cosmos_framework/data/generator/processors/__init__.py b/cosmos_framework/data/generator/processors/__init__.py index 5087c3df4..2d1219ea0 100644 --- a/cosmos_framework/data/generator/processors/__init__.py +++ b/cosmos_framework/data/generator/processors/__init__.py @@ -14,7 +14,7 @@ from cosmos_framework.data.generator.processors.nemotron3densevl_processor import Nemotron3DenseVLProcessor from cosmos_framework.data.generator.processors.nemotronvl_processor import NemotronVLProcessor from cosmos_framework.data.generator.processors.qwen3vl_nemo_chat_processor import Qwen3VLNemoChatProcessor -from cosmos_framework.data.generator.processors.qwen3vl_processor import Qwen3VLProcessor +from cosmos_framework.data.generator.processors.qwen3vl_processor import Qwen3VLProcessor, _is_local_qwen35_snapshot from cosmos_framework.model.generator.tokenizers.tokenization_qwen2 import Qwen2Tokenizer from cosmos_framework.utils.generator.reasoner.pretrained_models_downloader import maybe_download_hf_model_from_s3 @@ -106,16 +106,6 @@ def _download_llm_tokenizer( ) -def _is_local_qwen35_snapshot(path: str) -> bool: - """Recognize pinned Qwen3.5 snapshots whose directory name is only a revision.""" - config_path = os.path.join(path, "config.json") - if not os.path.isfile(config_path): - return False - with open(config_path) as config_file: - config = json.load(config_file) - return config.get("model_type") in {"qwen3_5", "qwen3_5_moe"} - - def build_processor( tokenizer_type: str, config_variant: Optional[str] = None, diff --git a/cosmos_framework/data/generator/processors/qwen3vl_processor.py b/cosmos_framework/data/generator/processors/qwen3vl_processor.py index 4209dd9b9..f4c448153 100644 --- a/cosmos_framework/data/generator/processors/qwen3vl_processor.py +++ b/cosmos_framework/data/generator/processors/qwen3vl_processor.py @@ -1,12 +1,12 @@ # SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: OpenMDW-1.1 +import json +from pathlib import Path from typing import Optional import numpy as np import torch -import transformers -from packaging.version import Version from cosmos_framework.data.generator.processors.base import ( BaseVLMProcessor, @@ -16,9 +16,17 @@ ) -class Qwen3VLProcessor( - BaseVLMProcessor -): +def _is_local_qwen35_snapshot(path: str) -> bool: + """Recognize Qwen3.5 metadata independently of a snapshot's directory name.""" + config_path = Path(path) / "config.json" + if not config_path.is_file(): + return False + with config_path.open() as config_file: + config = json.load(config_file) + return config.get("model_type") in {"qwen3_5", "qwen3_5_moe"} + + +class Qwen3VLProcessor(BaseVLMProcessor): """Wrapper around the HuggingFace ``AutoProcessor`` for Qwen3-VL models.""" # Qwen3-VL does not expose a single vision-end token in its vocabulary, so @@ -26,6 +34,7 @@ class Qwen3VLProcessor( # which silently resolved to the UNK token id. VISION_END_TOKEN: Optional[str] = None USES_SOURCE_VIDEO_TIMESTAMPS: bool = True + USES_TEMPORAL_PATCH_TIMESTAMPS: bool = True def __init__( self, @@ -43,7 +52,9 @@ def __init__( self.merge_size = self.processor.video_processor.merge_size self.use_smart_resize = True normalized_name = f"{name} {type(self.processor).__name__}".lower() - self.retain_mm_token_type_ids: bool = "qwen3.5" in normalized_name or "qwen3_5" in normalized_name + self.retain_mm_token_type_ids: bool = ( + "qwen3.5" in normalized_name or "qwen3_5" in normalized_name or _is_local_qwen35_snapshot(name) + ) def apply_chat_template( self, @@ -92,16 +103,16 @@ def apply_chat_template( "do_sample_frames": False, "video_metadata": video_metadata[0] if num_video == 1 else video_metadata, } - chat_template_kwargs = ( - {"processor_kwargs": kwargs} if Version(transformers.__version__) >= Version("5.0") else kwargs - ) + # Both Transformers 4.x and 5.x forward modality kwargs directly to + # the processor. Nesting them in ``processor_kwargs`` silently loses + # frame indices, FPS and the request to keep already-sampled frames. inputs = self.processor.apply_chat_template( messages, tokenize=tokenize, add_generation_prompt=add_generation_prompt, return_dict=True, return_tensors=return_tensors, - **chat_template_kwargs, + **kwargs, ) # Convert batch features into single features From 1618fd80b9c0874acd84ed61068837d586989829 Mon Sep 17 00:00:00 2001 From: Ramanathan Arunachalam Date: Thu, 1 Oct 2026 19:18:59 +0000 Subject: [PATCH 06/17] fix(edge): support padded mRoPE batches and available attention kernels Pad the variable sequence dimension before restoring position axes. Select supported attention implementations while honoring explicit overrides. Co-Authored-By: Claude Fable 5 Signed-off-by: Ramanathan Arunachalam --- .../sft/models/edge_model_config.py | 5 +- .../base/reasoner/defaults/vlm_policy.py | 15 +++++- .../base/reasoner/defaults/vlm_policy_test.py | 19 ++++++++ .../cosmos3_edge/get_rope_index_test.py | 48 +++++++++++++++++++ .../cosmos3_edge/modeling_cosmos3_edge.py | 9 +++- 5 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 cosmos_framework/configs/base/reasoner/defaults/vlm_policy_test.py create mode 100644 cosmos_framework/model/generator/reasoner/cosmos3_edge/get_rope_index_test.py diff --git a/cosmos_framework/configs/base/experiment/sft/models/edge_model_config.py b/cosmos_framework/configs/base/experiment/sft/models/edge_model_config.py index 1b2d0c3cb..523dd34eb 100644 --- a/cosmos_framework/configs/base/experiment/sft/models/edge_model_config.py +++ b/cosmos_framework/configs/base/experiment/sft/models/edge_model_config.py @@ -169,7 +169,10 @@ ), tokenizer=L(build_processor_lazy)( repository="nvidia/Cosmos3-Edge", - revision="main", + # Pin the public release used to build the matching DCP checkpoint. + # A symbolic ``main`` forces Hugging Face's CLI to contact the Hub + # even when the exact snapshot is already staged for an offline job. + revision="2a00e87e9976dc3ed5533dd18caf4cdbc3a1bcb2", ), ), ) diff --git a/cosmos_framework/configs/base/reasoner/defaults/vlm_policy.py b/cosmos_framework/configs/base/reasoner/defaults/vlm_policy.py index b5f8d8291..138510d00 100644 --- a/cosmos_framework/configs/base/reasoner/defaults/vlm_policy.py +++ b/cosmos_framework/configs/base/reasoner/defaults/vlm_policy.py @@ -1,6 +1,8 @@ # SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: OpenMDW-1.1 +import importlib.util + from hydra.core.config_store import ConfigStore from cosmos_framework.configs.base.defaults.reasoner import VLMConfig @@ -65,7 +67,18 @@ # model_type "cosmos3_edge" (native HF metadata, no remote code; classes are # registered in-framework). Reasoner weights load directly from the snapshot — # the training loader follows its root safetensors index; no converter step. -cosmos3_edge_reasoner = PolicyConfig(backbone=VLMConfig(model_name="nvidia/Cosmos3-Edge")) +# The default "cosmos" adapter is Qwen3-VL-specific and rejects Edge's +# explicit attention mask, so Edge must not inherit it. Prefer flash-attn-2 +# where its wheels exist (x86); fall back to SDPA elsewhere (e.g. aarch64). +# An explicit attn_implementation in the experiment TOML still wins. +_EDGE_ATTN_IMPLEMENTATION = ( + "flash_attention_2" if importlib.util.find_spec("flash_attn") is not None else "sdpa" +) + +cosmos3_edge_reasoner = PolicyConfig( + backbone=VLMConfig(model_name="nvidia/Cosmos3-Edge"), + attn_implementation=_EDGE_ATTN_IMPLEMENTATION, +) def register_vlm_policy(): diff --git a/cosmos_framework/configs/base/reasoner/defaults/vlm_policy_test.py b/cosmos_framework/configs/base/reasoner/defaults/vlm_policy_test.py new file mode 100644 index 000000000..2b97b927d --- /dev/null +++ b/cosmos_framework/configs/base/reasoner/defaults/vlm_policy_test.py @@ -0,0 +1,19 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: OpenMDW-1.1 + +"""Cosmos3-Edge attention default must match the platform's kernels.""" + +import importlib.util + +from cosmos_framework.configs.base.reasoner.defaults.vlm_policy import cosmos3_edge_reasoner + + +def test_edge_policy_never_defaults_to_cosmos_adapter(): + # The "cosmos" NATTEN adapter is Qwen3-VL-specific and rejects Edge's + # explicit attention mask; Edge must default to a mask-capable impl. + assert cosmos3_edge_reasoner.attn_implementation in {"flash_attention_2", "sdpa"} + + +def test_edge_policy_matches_flash_attn_availability(): + expected = "flash_attention_2" if importlib.util.find_spec("flash_attn") else "sdpa" + assert cosmos3_edge_reasoner.attn_implementation == expected diff --git a/cosmos_framework/model/generator/reasoner/cosmos3_edge/get_rope_index_test.py b/cosmos_framework/model/generator/reasoner/cosmos3_edge/get_rope_index_test.py new file mode 100644 index 000000000..a1abfdfd1 --- /dev/null +++ b/cosmos_framework/model/generator/reasoner/cosmos3_edge/get_rope_index_test.py @@ -0,0 +1,48 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: OpenMDW-1.1 + +"""Batched mRoPE position padding for Cosmos3-Edge with unequal sequence lengths.""" + +from types import SimpleNamespace + +import torch + +from cosmos_framework.model.generator.reasoner.cosmos3_edge.modeling_cosmos3_edge import ( + Cosmos3EdgeModel, +) + + +def _stub_model(): + return SimpleNamespace( + config=SimpleNamespace( + projector_config=SimpleNamespace(spatial_merge_size=2), + image_token_id=11, + video_token_id=12, + vision_start_token_id=13, + ) + ) + + +def test_get_rope_index_pads_unequal_batch_lengths(): + # Two text-only sequences of true lengths 10 and 9 in one padded batch — + # this crashed pad_sequence before the (L, 3) transpose fix. + input_ids = torch.ones(2, 10, dtype=torch.long) + attention_mask = torch.ones(2, 10, dtype=torch.long) + attention_mask[1, -1] = 0 + position_ids, deltas = Cosmos3EdgeModel.get_rope_index( + _stub_model(), input_ids=input_ids, attention_mask=attention_mask + ) + assert position_ids.shape == (3, 2, 10) + assert deltas.shape == (2, 1) + # Real positions are 0..L-1 per sample; sample 2's padded tail uses the pad value. + assert position_ids[0, 0].tolist() == list(range(10)) + assert position_ids[0, 1, :9].tolist() == list(range(9)) + + +def test_get_rope_index_equal_lengths_unchanged(): + input_ids = torch.ones(2, 6, dtype=torch.long) + position_ids, _ = Cosmos3EdgeModel.get_rope_index( + _stub_model(), input_ids=input_ids, attention_mask=torch.ones(2, 6, dtype=torch.long) + ) + assert position_ids.shape == (3, 2, 6) + assert position_ids[0, 0].tolist() == list(range(6)) diff --git a/cosmos_framework/model/generator/reasoner/cosmos3_edge/modeling_cosmos3_edge.py b/cosmos_framework/model/generator/reasoner/cosmos3_edge/modeling_cosmos3_edge.py index f107c9b07..d4d3ce51d 100644 --- a/cosmos_framework/model/generator/reasoner/cosmos3_edge/modeling_cosmos3_edge.py +++ b/cosmos_framework/model/generator/reasoner/cosmos3_edge/modeling_cosmos3_edge.py @@ -523,8 +523,13 @@ def get_rope_index( mrope_position_deltas.append(llm_positions.max() + 1 - len(input_ids)) mrope_position_deltas = torch.tensor(mrope_position_deltas, device=input_ids.device).unsqueeze(1) if cu_seqlens is None: - # Batching on second dim (batch) for batch seq - position_ids = pad_sequence(position_ids, batch_first=False, padding_value=1) + # Batching on second dim (batch) for batch seq. Each entry is + # (3, L_i); pad_sequence needs the variable length first, so + # transpose to (L_i, 3), pad to (L_max, batch, 3), and permute + # back to (3, batch, L_max). + position_ids = pad_sequence( + [p.transpose(0, 1) for p in position_ids], batch_first=False, padding_value=1 + ).permute(2, 1, 0) else: # Concat on last dim (seq_len) for packing seq position_ids = torch.cat(position_ids, dim=-1) From ac0ad64a71fa03b573a9c8ae9aac46a1dacd172d Mon Sep 17 00:00:00 2001 From: Ramanathan Arunachalam Date: Thu, 1 Oct 2026 19:18:59 +0000 Subject: [PATCH 07/17] fix(kv-cache): preserve FP8 decoding across CUDA architectures Decode FP8 cache entries on pre-Ada devices while retaining native FP8 masked-load semantics on supported architectures. --- .../generator/utils/kv_storage_backend.py | 34 ++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/cosmos_framework/model/generator/utils/kv_storage_backend.py b/cosmos_framework/model/generator/utils/kv_storage_backend.py index 88f4ec980..16aeb7f00 100644 --- a/cosmos_framework/model/generator/utils/kv_storage_backend.py +++ b/cosmos_framework/model/generator/utils/kv_storage_backend.py @@ -31,6 +31,22 @@ _decode_fp8_kv_many_kernel: Any = None if triton is not None and tl is not None: + @triton.jit + def _decode_e4m3fn_bytes(values): + # Ampere lacks native E4M3 conversions. All finite E4M3 values are + # exactly representable in BF16, including the subnormal range. + bits = values.to(tl.uint16) + sign = (bits & 0x80) << 8 + exponent = (bits >> 3) & 0xF + mantissa = bits & 0x7 + normal_bits = sign | ((exponent + 120) << 7) | (mantissa << 4) + normal = normal_bits.to(tl.uint16).to(tl.bfloat16, bitcast=True) + subnormal = (mantissa.to(tl.float32) * (1.0 / 512.0)).to(tl.bfloat16) + subnormal_bits = subnormal.to(tl.uint16, bitcast=True) | sign + subnormal = subnormal_bits.to(tl.bfloat16, bitcast=True) + decoded = tl.where(exponent == 0, subnormal, normal) + return tl.where((bits & 0x7F) == 0x7F, float("nan"), decoded).to(tl.bfloat16) + @triton.jit def _decode_fp8_kv_many_kernel_impl( k_value_ptrs, @@ -46,6 +62,7 @@ def _decode_fp8_kv_many_kernel_impl( num_heads: tl.constexpr, # pyright: ignore[reportInvalidTypeForm] head_dim: tl.constexpr, # pyright: ignore[reportInvalidTypeForm] block_size: tl.constexpr, # pyright: ignore[reportInvalidTypeForm] + native_fp8: tl.constexpr, # pyright: ignore[reportInvalidTypeForm] ) -> None: entry_ord = tl.program_id(1) # [] slot = tl.load(ordered_slots + entry_ord) # [] @@ -63,12 +80,20 @@ def _decode_fp8_kv_many_kernel_impl( (batch_idx * total_seq + seq_start + seq_idx) * num_heads + head_idx ) * head_dim + dim_idx # [block_size] - k_base = tl.load(k_value_ptrs + slot).to(tl.pointer_type(tl.float8e4nv)) # [] - v_base = tl.load(v_value_ptrs + slot).to(tl.pointer_type(tl.float8e4nv)) # [] k_scale = tl.load(k_scales + slot).to(tl.bfloat16) # [] v_scale = tl.load(v_scales + slot).to(tl.bfloat16) # [] - k_fp8 = tl.load(k_base + offsets, mask=mask).to(tl.bfloat16) # [block_size] - v_fp8 = tl.load(v_base + offsets, mask=mask).to(tl.bfloat16) # [block_size] + if native_fp8: + k_base = tl.load(k_value_ptrs + slot).to(tl.pointer_type(tl.float8e4nv)) # [] + v_base = tl.load(v_value_ptrs + slot).to(tl.pointer_type(tl.float8e4nv)) # [] + # Masked lanes are never stored. Leave them unspecified, avoiding + # Triton's unsupported integer-to-FP8 masked-fill conversion. + k_fp8 = tl.load(k_base + offsets, mask=mask).to(tl.bfloat16) # [block_size] + v_fp8 = tl.load(v_base + offsets, mask=mask).to(tl.bfloat16) # [block_size] + else: + k_base = tl.load(k_value_ptrs + slot).to(tl.pointer_type(tl.uint8)) # [] + v_base = tl.load(v_value_ptrs + slot).to(tl.pointer_type(tl.uint8)) # [] + k_fp8 = _decode_e4m3fn_bytes(tl.load(k_base + offsets, mask=mask, other=0)) # [block_size] + v_fp8 = _decode_e4m3fn_bytes(tl.load(v_base + offsets, mask=mask, other=0)) # [block_size] tl.store(out_k + out_offsets, k_fp8 * k_scale, mask=mask) tl.store(out_v + out_offsets, v_fp8 * v_scale, mask=mask) @@ -165,6 +190,7 @@ def decode_fp8_kv_many_triton( num_heads, head_dim, block_size, + torch.cuda.get_device_capability(k_value_ptrs.device) >= (8, 9), ) except Exception as exc: # Preserve the original launch error as the cause for kernel debugging. From daaf089af23aa2cb77bfdad903058310dba968ab Mon Sep 17 00:00:00 2001 From: Ramanathan Arunachalam Date: Thu, 1 Oct 2026 19:18:59 +0000 Subject: [PATCH 08/17] feat(reasoner): integrate LoRA training and Qwen patch embedding Inject adapters before sharding, restore adapter-only trainability after materialization, and report logical parameter scope and token loss statistics. Include Qwen patch-embedding compatibility and the scalar Liger loss API. --- .../base/reasoner/defaults/policy_config.py | 37 ++- .../generator/algorithm/loss/cross_entropy.py | 7 +- .../loss/cross_entropy_stats_test.py | 38 +++ .../model/generator/qwen3_vl_compat.py | 62 +++++ .../model/generator/qwen3_vl_compat_test.py | 50 ++++ cosmos_framework/model/generator/vlm_model.py | 89 ++++++- cosmos_framework/utils/generator/lora.py | 229 +++++++++++++++--- cosmos_framework/utils/generator/lora_test.py | 83 +++++++ 8 files changed, 553 insertions(+), 42 deletions(-) create mode 100644 cosmos_framework/model/generator/algorithm/loss/cross_entropy_stats_test.py create mode 100644 cosmos_framework/model/generator/qwen3_vl_compat.py create mode 100644 cosmos_framework/model/generator/qwen3_vl_compat_test.py create mode 100644 cosmos_framework/utils/generator/lora_test.py diff --git a/cosmos_framework/configs/base/reasoner/defaults/policy_config.py b/cosmos_framework/configs/base/reasoner/defaults/policy_config.py index a48588095..83191332a 100644 --- a/cosmos_framework/configs/base/reasoner/defaults/policy_config.py +++ b/cosmos_framework/configs/base/reasoner/defaults/policy_config.py @@ -33,7 +33,21 @@ class PolicyConfig: # instead of averaging independently normalized microbatch ratios. normalize_weighted_ce_over_accumulation_window: bool = False - # Extra model config + # Parameter-efficient fine-tuning. These fields intentionally live on + # the VLM policy instead of reusing the VFM/MoT model config: the two + # backends have different module names and checkpoint layouts. + lora_enabled: bool = False + lora_rank: int = 16 + lora_alpha: float = 32.0 + lora_dropout: float = 0.0 + lora_target_modules: str = "q_proj,k_proj,v_proj,o_proj" + lora_bias: str = "none" + lora_use_rslora: bool = False + lora_modules_to_save: str = "" + lora_precision: str | None = None + + # Legacy free-form field retained for config compatibility. New recipes + # must use the explicit fields above so PEFT equivalence can be validated. lora: Union[str, None] = None enable_liger_kernel: bool = False # Dense Qwen3.5 caption opt-ins; other recipes retain the standard logits loss. @@ -47,6 +61,27 @@ class PolicyConfig: # "sdpa", or "eager" for fallback. attn_implementation: str = "cosmos" + # Qwen3-VL's patch projection is a non-overlapping Conv3d and is therefore + # algebraically equivalent to a linear projection. ``auto`` selects the + # linear implementation on A100 (SM80), where large FSDP runs have exposed + # a cuDNN Conv3d backward failure. No environment-time monkey patch is + # required. + qwen3_vl_patch_embed: str = "auto" + + def __attrs_post_init__(self) -> None: + if self.lora_rank <= 0: + raise ValueError("lora_rank must be positive") + if self.lora_alpha <= 0: + raise ValueError("lora_alpha must be positive") + if not 0.0 <= self.lora_dropout < 1.0: + raise ValueError("lora_dropout must be in [0, 1)") + if self.lora_bias not in {"none", "all", "lora_only"}: + raise ValueError("lora_bias must be one of: none, all, lora_only") + if self.lora_precision not in {None, "float32", "float16", "bfloat16"}: + raise ValueError("lora_precision must be float32, float16, bfloat16, or unset") + if self.qwen3_vl_patch_embed not in {"auto", "linear", "conv3d"}: + raise ValueError("qwen3_vl_patch_embed must be auto, linear, or conv3d") + @attrs.define(slots=False) class LBLConfig: diff --git a/cosmos_framework/model/generator/algorithm/loss/cross_entropy.py b/cosmos_framework/model/generator/algorithm/loss/cross_entropy.py index fce03ddd1..8ac303bf6 100644 --- a/cosmos_framework/model/generator/algorithm/loss/cross_entropy.py +++ b/cosmos_framework/model/generator/algorithm/loss/cross_entropy.py @@ -214,12 +214,11 @@ def _fused_linear_ce_sum( hidden: torch.Tensor, weight: torch.Tensor, labels: torch.Tensor, ignore_index: int ) -> torch.Tensor: """Use Liger's scalar reduction; reduction='none' has incompatible backward semantics.""" - from liger_kernel.ops.fused_linear_cross_entropy import LigerFusedLinearCrossEntropyFunction + from liger_kernel.transformers.functional import liger_fused_linear_cross_entropy - loss, _, _ = LigerFusedLinearCrossEntropyFunction.apply( - hidden, weight, labels, None, None, ignore_index, 0.0, 0.0, "sum", None, False, torch.float32, False, False + return liger_fused_linear_cross_entropy( + hidden, weight, labels, ignore_index=ignore_index, reduction="sum", accum_dtype=torch.float32 ) - return loss def fused_weighted_cross_entropy_loss( diff --git a/cosmos_framework/model/generator/algorithm/loss/cross_entropy_stats_test.py b/cosmos_framework/model/generator/algorithm/loss/cross_entropy_stats_test.py new file mode 100644 index 000000000..2ed0b68f5 --- /dev/null +++ b/cosmos_framework/model/generator/algorithm/loss/cross_entropy_stats_test.py @@ -0,0 +1,38 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: OpenMDW-1.1 + +from __future__ import annotations + +import torch +import torch.nn.functional as F + +from cosmos_framework.model.generator.algorithm.loss.cross_entropy import ( + cross_entropy_loss, + weighted_cross_entropy_loss, +) + + +def test_cross_entropy_returns_token_numerator_and_denominator() -> None: + torch.manual_seed(7) + logits = torch.randn(2, 4, 5, requires_grad=True) + labels = torch.tensor([[0, 1, 2, -100], [0, 2, 3, 4]]) + loss, stats = cross_entropy_loss(logits, labels, return_stats=True) + numerator, denominator = stats.token_ce_sum, stats.valid_token_count + shifted_logits = logits[:, :-1].reshape(-1, 5) + shifted_labels = labels[:, 1:].reshape(-1) + expected = F.cross_entropy(shifted_logits.float(), shifted_labels, ignore_index=-100, reduction="none") + valid = shifted_labels != -100 + assert denominator.item() == int(valid.sum()) + torch.testing.assert_close(numerator, expected[valid].sum()) + torch.testing.assert_close(loss, numerator / denominator) + + +def test_weighted_objective_keeps_unweighted_token_stats() -> None: + torch.manual_seed(11) + logits = torch.randn(2, 4, 5) + labels = torch.tensor([[0, 1, -100, -100], [0, 2, 3, 4]]) + objective, stats = weighted_cross_entropy_loss(logits, labels, exponent=1.0, return_stats=True) + numerator, denominator = stats.token_ce_sum, stats.valid_token_count + assert objective.ndim == 0 + assert denominator.item() == 4 + assert numerator.item() > 0 diff --git a/cosmos_framework/model/generator/qwen3_vl_compat.py b/cosmos_framework/model/generator/qwen3_vl_compat.py new file mode 100644 index 000000000..0cf254c65 --- /dev/null +++ b/cosmos_framework/model/generator/qwen3_vl_compat.py @@ -0,0 +1,62 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: OpenMDW-1.1 + +"""Repository-owned Qwen3-VL training compatibility helpers.""" + +from __future__ import annotations + +import types + +import torch +import torch.nn.functional as F + + +def _linear_patch_embed_forward(self, hidden_states: torch.Tensor) -> torch.Tensor: + patch_elements = self.in_channels * self.temporal_patch_size * self.patch_size * self.patch_size + flat_input = hidden_states.reshape(-1, patch_elements).to(dtype=self.proj.weight.dtype) + flat_weight = self.proj.weight.reshape(self.embed_dim, patch_elements) + return F.linear(flat_input, flat_weight, self.proj.bias) + + +_linear_patch_embed_forward._tao_channels_last_3d = True # type: ignore[attr-defined] + + +def should_use_linear_patch_embed(mode: str, *, device_capability: tuple[int, int] | None = None) -> bool: + """Resolve ``auto|linear|conv3d`` without consulting environment shims.""" + if mode not in {"auto", "linear", "conv3d"}: + raise ValueError(f"Unsupported Qwen3-VL patch-embed mode: {mode!r}") + if mode == "linear": + return True + if mode == "conv3d": + return False + if device_capability is None and torch.cuda.is_available(): + device_capability = torch.cuda.get_device_capability() + return device_capability == (8, 0) + + +def apply_qwen3_vl_patch_embed_compat( + model: torch.nn.Module, + *, + model_type: str, + mode: str, + device_capability: tuple[int, int] | None = None, +) -> bool: + """Use the A100-safe algebraic projection for Qwen3-VL patch embeds. + + Returns whether a replacement was applied. The original Conv3d parameters + and state-dict keys are unchanged, so checkpoint compatibility is exact. + """ + if model_type not in {"qwen3_vl", "qwen3_vl_moe"}: + return False + if not should_use_linear_patch_embed(mode, device_capability=device_capability): + return False + + patched = 0 + for module in model.modules(): + required = ("in_channels", "temporal_patch_size", "patch_size", "embed_dim", "proj") + if all(hasattr(module, name) for name in required) and isinstance(module.proj, torch.nn.Conv3d): + module.forward = types.MethodType(_linear_patch_embed_forward, module) + patched += 1 + if patched != 1: + raise RuntimeError(f"Expected one Qwen3-VL PatchEmbed module, found {patched}") + return True diff --git a/cosmos_framework/model/generator/qwen3_vl_compat_test.py b/cosmos_framework/model/generator/qwen3_vl_compat_test.py new file mode 100644 index 000000000..73c5f8c1d --- /dev/null +++ b/cosmos_framework/model/generator/qwen3_vl_compat_test.py @@ -0,0 +1,50 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: OpenMDW-1.1 + +from __future__ import annotations + +import torch + +from cosmos_framework.model.generator.qwen3_vl_compat import ( + apply_qwen3_vl_patch_embed_compat, + should_use_linear_patch_embed, +) + + +class _PatchEmbed(torch.nn.Module): + def __init__(self) -> None: + super().__init__() + self.in_channels = 3 + self.temporal_patch_size = 2 + self.patch_size = 2 + self.embed_dim = 5 + self.proj = torch.nn.Conv3d(3, 5, kernel_size=(2, 2, 2), stride=(2, 2, 2), bias=True) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + x = x.view(-1, self.in_channels, self.temporal_patch_size, self.patch_size, self.patch_size) + return self.proj(x).view(-1, self.embed_dim) + + +def test_auto_selects_linear_only_on_sm80() -> None: + assert should_use_linear_patch_embed("auto", device_capability=(8, 0)) + assert not should_use_linear_patch_embed("auto", device_capability=(9, 0)) + assert should_use_linear_patch_embed("linear", device_capability=(9, 0)) + assert not should_use_linear_patch_embed("conv3d", device_capability=(8, 0)) + + +def test_linear_patch_is_algebraically_equivalent_and_preserves_keys() -> None: + model = torch.nn.Sequential(_PatchEmbed()) + values = torch.randn(4, 3 * 2 * 2 * 2) + expected = model(values) + keys_before = set(model.state_dict()) + + changed = apply_qwen3_vl_patch_embed_compat( + model, + model_type="qwen3_vl", + mode="linear", + device_capability=(8, 0), + ) + + assert changed is True + torch.testing.assert_close(model(values), expected) + assert set(model.state_dict()) == keys_before diff --git a/cosmos_framework/model/generator/vlm_model.py b/cosmos_framework/model/generator/vlm_model.py index ba4d59b21..27b02c935 100644 --- a/cosmos_framework/model/generator/vlm_model.py +++ b/cosmos_framework/model/generator/vlm_model.py @@ -28,14 +28,15 @@ import torch.nn as nn from torch.nn.modules.module import _IncompatibleKeys -from cosmos_framework.utils.lazy_config import instantiate -from cosmos_framework.model._base import ImaginaireModel -from cosmos_framework.utils import log -from cosmos_framework.model.generator.algorithm.loss.cross_entropy import cross_entropy_loss, weighted_cross_entropy_loss -from cosmos_framework.model.generator.algorithm.loss.load_balancing import compute_load_balancing_loss from cosmos_framework.configs.base.defaults.parallelism import PRECISION_TO_TORCH_DTYPE from cosmos_framework.configs.base.defaults.reasoner import validate_sound_understanding_config from cosmos_framework.configs.base.reasoner.defaults.policy_config import VLMModelConfig +from cosmos_framework.model._base import ImaginaireModel +from cosmos_framework.model.generator.algorithm.loss.cross_entropy import ( + cross_entropy_loss, + weighted_cross_entropy_loss, +) +from cosmos_framework.model.generator.algorithm.loss.load_balancing import compute_load_balancing_loss from cosmos_framework.model.generator.hf_model import HFModel from cosmos_framework.model.generator.parallelize_vlm import parallelize from cosmos_framework.model.generator.reasoner.qwen35_caption import ( @@ -44,6 +45,7 @@ ) from cosmos_framework.model.generator.utils.moe_utils import collect_hf_moe_lbl_metadata, set_hf_moe_token_mask from cosmos_framework.model.generator.utils.safetensors_loader import load_vlm_model +from cosmos_framework.utils import log from cosmos_framework.utils.generator.input_probe import ( maybe_dump_forward_result, maybe_dump_gradients, @@ -60,6 +62,7 @@ TRUE_PACKING_CPU_PREPARED_KEY, assert_packing_temporal_inputs_supported, ) +from cosmos_framework.utils.lazy_config import instantiate # Model-type dispatch sets. Using hf_config.model_type (stable HF-defined string) # rather than backbone.model_name avoids the brittleness of substring-matching a local @@ -343,7 +346,18 @@ def __init__(self, config: VLMModelConfig, checkpoint): # Apply freeze before the optimizer is built — ``build_optimizer`` reads # ``requires_grad`` off ``named_parameters``. - n_trainable = _apply_freeze_config(self.model.model, self.hf_config.model_type, self.config.freeze) + if self.config.policy.lora_enabled: + from cosmos_framework.utils.generator.lora import apply_lora_trainable_scope + + peft_summary = apply_lora_trainable_scope( + self.model.model, + lora_target_modules=self.config.policy.lora_target_modules, + lora_bias=self.config.policy.lora_bias, + lora_modules_to_save=self.config.policy.lora_modules_to_save, + ) + n_trainable = int(peft_summary["trainable_parameter_tensors"]) + else: + n_trainable = _apply_freeze_config(self.model.model, self.hf_config.model_type, self.config.freeze) if config.sound_und: # The standalone artifact is the sole source of encoder weights. # Keep it immutable even when a broad trainable_params expression @@ -355,9 +369,19 @@ def __init__(self, config: VLMModelConfig, checkpoint): self.model.model.sound_und_model.projector.eval() n_trainable = sum(parameter.requires_grad for parameter in self.model.model.parameters()) assert n_trainable > 0, "audio freeze policy left 0 trainable parameters — check freeze patterns" - log.info( - f"freeze config applied (model_type={self.hf_config.model_type}): {n_trainable} trainable parameter tensors" + trainable_parameters = sum( + parameter.numel() for parameter in self.model.parameters() if parameter.requires_grad ) + total_parameters = sum(parameter.numel() for parameter in self.model.parameters()) + peft_summary = getattr(self.model.model, "_tao_peft_parameter_summary", None) + self.parameter_summary = peft_summary or { + "training_mode": "dense_sft", + "trainable_parameters": trainable_parameters, + "total_parameters": total_parameters, + "frozen_parameters": total_parameters - trainable_parameters, + "trainable_parameter_tensors": n_trainable, + } + log.info(f"freeze config applied (model_type={self.hf_config.model_type}): {self.parameter_summary}") if self.parallel_dims is not None and self.parallel_dims.cp_enabled: # Both CE variants normalize over every rank in the world, which is only the @@ -445,6 +469,32 @@ def _init_vlm(self, config: VLMModelConfig, checkpoint) -> None: enable_fused_weighted_ce=policy.enable_fused_weighted_ce, weighted_ce_exponent=policy.weighted_ce_exponent, ) + + from cosmos_framework.model.generator.qwen3_vl_compat import apply_qwen3_vl_patch_embed_compat + + patch_embed_changed = apply_qwen3_vl_patch_embed_compat( + hf_model.model, + model_type=hf_model.hf_config.model_type, + mode=policy.qwen3_vl_patch_embed, + ) + if patch_embed_changed: + log.info("Using repository-owned linear Qwen3-VL PatchEmbed compatibility path") + + if policy.lora_enabled: + from cosmos_framework.utils.generator.lora import inject_lora_pre_fsdp + + inject_lora_pre_fsdp( + hf_model.model, + lora_rank=policy.lora_rank, + lora_alpha=policy.lora_alpha, + lora_dropout=policy.lora_dropout, + lora_target_modules=policy.lora_target_modules, + lora_bias=policy.lora_bias, + lora_use_rslora=policy.lora_use_rslora, + lora_modules_to_save=policy.lora_modules_to_save, + lora_precision=policy.lora_precision, + ) + # ── b.1. Early family-gate for backbone.pretrained_weights ── # Fail-fast on unsupported VLM families BEFORE any expensive work # (parallelize, materialize, base-weight load, overlay download). @@ -547,10 +597,12 @@ def _init_vlm(self, config: VLMModelConfig, checkpoint) -> None: else: safetensors_local_path = local_path + base_skip_patterns = [r".*\.lora_[AB]\.weight"] if policy.lora_enabled else None hf_model.load_weights( checkpoint_path=safetensors_local_path, credential_path=None, # local path after download parallel_dims=parallel_dims if torch.distributed.is_initialized() else None, + extra_skip_patterns=base_skip_patterns, ) # ── g.2. Optional LLM overlay (backbone.pretrained_weights) ── @@ -576,7 +628,7 @@ def _init_vlm(self, config: VLMModelConfig, checkpoint) -> None: checkpoint_path=llm_local_path, credential_path=None, parallel_dims=parallel_dims if torch.distributed.is_initialized() else None, - extra_skip_patterns=overlay_skip_patterns, + extra_skip_patterns=overlay_skip_patterns + (base_skip_patterns or []), ) lm_loaded = {k for k in keys_loaded if is_lm_key(k)} if not lm_loaded: @@ -605,11 +657,24 @@ def _init_vlm(self, config: VLMModelConfig, checkpoint) -> None: f"{audio_config.encoder_checkpoint_path}" ) + if policy.lora_enabled: + from cosmos_framework.utils.generator.lora import init_lora_weights_post_materialization + + init_lora_weights_post_materialization(hf_model.model) + self.model = hf_model self.parallel_dims = parallel_dims self.model_name_or_path = local_path self.hf_config = hf_model.hf_config + trainable = sum(p.numel() for p in hf_model.parameters() if p.requires_grad) + total = sum(p.numel() for p in hf_model.parameters()) + log.info( + "parameter summary: " + f"mode={'peft' if policy.lora_enabled else 'dense_sft'}, " + f"trainable={trainable}, total={total}, frozen={total - trainable}" + ) + def on_train_start(self, memory_format) -> None: """Called by trainer after model.to("cuda"). No device move needed here.""" @@ -934,6 +999,10 @@ def training_step(self, data: dict, iteration: int) -> tuple[dict, torch.Tensor] "labels": labels, "train_objective_numerator": train_objective_numerator, "train_objective_denominator": train_objective_denominator, + # TAO's status callback reports the unweighted token CE independently + # of the optimized objective (weighted CE or MoE auxiliary terms). + "loss_numerator": loss_stats.token_ce_sum, + "loss_denominator": loss_stats.valid_token_count, } if backward_loss is not loss: output["_backward_loss"] = backward_loss @@ -977,5 +1046,7 @@ def validation_step(self, data: dict, iteration: int) -> tuple[dict, torch.Tenso "val_objective_denominator": stats.objective_denominator, "val_token_ce_sum": stats.token_ce_sum, "val_n_valid_tokens": stats.valid_token_count, + "loss_numerator": stats.token_ce_sum, + "loss_denominator": stats.valid_token_count, } return output, loss diff --git a/cosmos_framework/utils/generator/lora.py b/cosmos_framework/utils/generator/lora.py index bbd3215db..554f2a9b4 100644 --- a/cosmos_framework/utils/generator/lora.py +++ b/cosmos_framework/utils/generator/lora.py @@ -34,14 +34,24 @@ class LoraInjectedLinear(nn.Linear): Forward computes ``y = base(x) + (alpha / r) * lora_B(lora_A(x))``. """ - def __init__(self, base: nn.Linear, rank: int, alpha: int) -> None: + def __init__( + self, + base: nn.Linear, + rank: int, + alpha: float, + *, + dropout: float = 0.0, + use_rslora: bool = False, + adapter_dtype: torch.dtype | None = None, + ) -> None: # Reuse base's geometry. Inherit nn.Linear so ``super().forward(x)`` # dispatches to the standard F.linear path. super().__init__( base.in_features, base.out_features, bias=base.bias is not None, - device="meta", + device=base.weight.device, + dtype=base.weight.dtype, ) # Replace nn.Linear's freshly-allocated parameters with the base's # existing ones. On meta device this is a no-op for memory; on a @@ -51,20 +61,43 @@ def __init__(self, base: nn.Linear, rank: int, alpha: int) -> None: self.bias = base.bias # Sibling submodules. Using bias=False nn.Linear gives us a single # ``weight`` parameter and a clean ``.lora_A.weight`` state-dict key. - self.lora_A = nn.Linear(base.in_features, rank, bias=False, device="meta") - self.lora_B = nn.Linear(rank, base.out_features, bias=False, device="meta") + adapter_dtype = adapter_dtype or base.weight.dtype + self.lora_A = nn.Linear( + base.in_features, + rank, + bias=False, + device=base.weight.device, + dtype=adapter_dtype, + ) + self.lora_B = nn.Linear( + rank, + base.out_features, + bias=False, + device=base.weight.device, + dtype=adapter_dtype, + ) + self.lora_dropout = nn.Dropout(dropout) if dropout else nn.Identity() self._lora_rank = int(rank) self._lora_alpha = float(alpha) + self._lora_use_rslora = bool(use_rslora) @property def _lora_scale(self) -> float: - return self._lora_alpha / self._lora_rank + denominator = math.sqrt(self._lora_rank) if self._lora_use_rslora else self._lora_rank + return self._lora_alpha / denominator def forward(self, x: torch.Tensor) -> torch.Tensor: base_out = F.linear(x, self.weight, self.bias) - lora_out = self.lora_B(self.lora_A(x)) + adapter_input = self.lora_dropout(x).to(dtype=self.lora_A.weight.dtype) + lora_out = self.lora_B(self.lora_A(adapter_input)).to(dtype=base_out.dtype) return base_out + self._lora_scale * lora_out + @torch.no_grad() + def merge_adapter_(self) -> None: + """Merge the adapter update into the base weight in place.""" + delta = self.lora_B.weight.float() @ self.lora_A.weight.float() + self.weight.add_(delta.to(dtype=self.weight.dtype), alpha=self._lora_scale) + def _target_matches(full_child_path: str, child_name: str, target: str) -> bool: """Return True if ``target`` selects the child at ``full_child_path``. @@ -90,7 +123,10 @@ def _inject_lora_inplace( network: nn.Module, target_modules: list[str], rank: int, - alpha: int, + alpha: float, + dropout: float = 0.0, + use_rslora: bool = False, + adapter_dtype: torch.dtype | None = None, ) -> int: """Replace each targeted ``nn.Linear`` child in-place with ``LoraInjectedLinear``. @@ -109,17 +145,93 @@ def _inject_lora_inplace( continue full_child_path = f"{parent_name}.{child_name}" if parent_name else child_name if any(_target_matches(full_child_path, child_name, t) for t in target_modules): - setattr(parent, child_name, LoraInjectedLinear(child, rank, alpha)) + setattr( + parent, + child_name, + LoraInjectedLinear( + child, + rank, + alpha, + dropout=dropout, + use_rslora=use_rslora, + adapter_dtype=adapter_dtype, + ), + ) replaced += 1 return replaced +def apply_lora_trainable_scope( + network: torch.nn.Module, + *, + lora_target_modules: str, + lora_bias: str = "none", + lora_modules_to_save: str = "", +) -> dict[str, object]: + """Reapply and report the logical LoRA trainable scope. + + The scope must be restored after model materialization/FSDP transforms, + which may recreate parameters with ``requires_grad=True``. + """ + target_modules = [item.strip() for item in lora_target_modules.split(",") if item.strip()] + modules_to_save = {item.strip() for item in lora_modules_to_save.split(",") if item.strip()} + trainable_parameters = 0 + frozen_parameters = 0 + trainable_parameter_tensors = 0 + for name, parameter in network.named_parameters(): + module_name = name.rsplit(".", 1)[0] + parent_name = module_name.rsplit(".", 1)[0] + is_module_to_save = any( + module_name == suffix + or module_name.endswith(f".{suffix}") + or parent_name == suffix + or parent_name.endswith(f".{suffix}") + for suffix in modules_to_save + ) + is_target_bias = name.endswith(".bias") and any( + f".{target}." in f".{name}" for target in target_modules + ) + is_trainable_bias = lora_bias == "all" and name.endswith(".bias") + trainable = ( + "lora_" in name + or is_module_to_save + or is_trainable_bias + or (lora_bias == "lora_only" and is_target_bias) + ) + parameter.requires_grad_(trainable) + if trainable: + trainable_parameters += parameter.numel() + trainable_parameter_tensors += 1 + else: + frozen_parameters += parameter.numel() + + adapter_modules = sorted( + name for name, module in network.named_modules() if isinstance(module, LoraInjectedLinear) + ) + summary: dict[str, object] = { + "training_mode": "peft", + "trainable_parameters": trainable_parameters, + "total_parameters": trainable_parameters + frozen_parameters, + "frozen_parameters": frozen_parameters, + "trainable_parameter_tensors": trainable_parameter_tensors, + "adapter_module_count": len(adapter_modules), + "adapter_modules": adapter_modules, + } + network._tao_peft_parameter_summary = summary + return summary + + def inject_lora_pre_fsdp( network: torch.nn.Module, *, lora_rank: int, - lora_alpha: int, + lora_alpha: float, lora_target_modules: str, + lora_dropout: float = 0.0, + lora_bias: str = "none", + lora_use_rslora: bool = False, + lora_modules_to_save: str = "", + lora_precision: str | None = None, ) -> torch.nn.Module: """Inject LoRA adapters into ``network`` BEFORE FSDP wrap on meta device. @@ -142,6 +254,12 @@ def inject_lora_pre_fsdp( raise ValueError(f"LoRA rank must be positive, got {lora_rank}") if lora_alpha <= 0: raise ValueError(f"LoRA alpha must be positive, got {lora_alpha}") + if not 0.0 <= lora_dropout < 1.0: + raise ValueError(f"LoRA dropout must be in [0, 1), got {lora_dropout}") + if lora_bias not in {"none", "all", "lora_only"}: + raise ValueError(f"Unsupported LoRA bias mode: {lora_bias!r}") + if lora_precision not in {None, "float32", "float16", "bfloat16"}: + raise ValueError(f"Unsupported LoRA precision: {lora_precision!r}") target_modules_list = [m.strip() for m in lora_target_modules.split(",") if m.strip()] if not target_modules_list: @@ -161,31 +279,46 @@ def _target_exists(t: str) -> bool: if invalid_modules: log.warning(f"LoRA target modules not found in model: {invalid_modules}") - log.info(f"Injecting LoRA on meta device: rank={lora_rank}, alpha={lora_alpha}, targets={target_modules_list}") + modules_to_save = {m.strip() for m in lora_modules_to_save.split(",") if m.strip()} + adapter_dtype = getattr(torch, lora_precision) if lora_precision else None + log.info( + "Injecting LoRA before FSDP: " + f"rank={lora_rank}, alpha={lora_alpha}, dropout={lora_dropout}, " + f"rslora={lora_use_rslora}, bias={lora_bias}, targets={target_modules_list}, " + f"modules_to_save={sorted(modules_to_save)}" + ) try: - replaced = _inject_lora_inplace(network, target_modules_list, lora_rank, lora_alpha) + replaced = _inject_lora_inplace( + network, + target_modules_list, + lora_rank, + lora_alpha, + dropout=lora_dropout, + use_rslora=lora_use_rslora, + adapter_dtype=adapter_dtype, + ) except Exception as e: raise RuntimeError(f"Failed to inject LoRA adapters into model: {e}") from e if replaced == 0: - log.warning(f"LoRA injection replaced 0 modules — check lora_target_modules={lora_target_modules!r}") - - lora_params = 0 - frozen_params = 0 - for name, param in network.named_parameters(): - if "lora_" in name: - param.requires_grad_(True) - lora_params += param.numel() - else: - param.requires_grad_(False) - frozen_params += param.numel() + raise ValueError(f"LoRA injection replaced 0 modules; check lora_target_modules={lora_target_modules!r}") + + summary = apply_lora_trainable_scope( + network, + lora_target_modules=lora_target_modules, + lora_bias=lora_bias, + lora_modules_to_save=lora_modules_to_save, + ) + trainable_parameters = int(summary["trainable_parameters"]) + frozen_parameters = int(summary["frozen_parameters"]) + total_parameters = int(summary["total_parameters"]) log.info( f"LoRA injection successful: {replaced} modules wrapped, " - f"{lora_params:,} trainable LoRA params, " - f"{frozen_params:,} frozen base params " - f"({100 * lora_params / max(1, lora_params + frozen_params):.3f}% trainable)" + f"{trainable_parameters:,} trainable LoRA params, " + f"{frozen_parameters:,} frozen base params " + f"({100 * trainable_parameters / max(1, total_parameters):.3f}% trainable)" ) return network @@ -203,8 +336,48 @@ def init_lora_weights_post_materialization(network: torch.nn.Module) -> None: for module in network.modules(): if not isinstance(module, LoraInjectedLinear): continue - base_dtype = module.weight.dtype + adapter_dtype = module.lora_A.weight.dtype torch.nn.init.kaiming_uniform_(module.lora_A.weight, a=math.sqrt(5)) - module.lora_A.weight.data = module.lora_A.weight.data.to(base_dtype) + module.lora_A.weight.data = module.lora_A.weight.data.to(adapter_dtype) torch.nn.init.zeros_(module.lora_B.weight) - module.lora_B.weight.data = module.lora_B.weight.data.to(base_dtype) + module.lora_B.weight.data = module.lora_B.weight.data.to(adapter_dtype) + + +@torch.no_grad() +def merge_lora_adapters_(network: torch.nn.Module) -> int: + """Merge every injected adapter and return the number merged. + + The modules remain present so a DCP state dict keeps the same exact keys; + callers exporting to a dense Hugging Face model should copy only base + parameters after this operation. + """ + merged = 0 + for module in network.modules(): + if isinstance(module, LoraInjectedLinear): + module.merge_adapter_() + merged += 1 + return merged + + +@torch.no_grad() +def merge_and_strip_lora_adapters_(network: torch.nn.Module) -> int: + """Merge adapters and restore plain ``nn.Linear`` modules for HF export.""" + merged = 0 + for parent in list(network.modules()): + for child_name, child in list(parent.named_children()): + if not isinstance(child, LoraInjectedLinear): + continue + child.merge_adapter_() + dense = nn.Linear( + child.in_features, + child.out_features, + bias=child.bias is not None, + device=child.weight.device, + dtype=child.weight.dtype, + ) + dense.weight = child.weight + if child.bias is not None: + dense.bias = child.bias + setattr(parent, child_name, dense) + merged += 1 + return merged diff --git a/cosmos_framework/utils/generator/lora_test.py b/cosmos_framework/utils/generator/lora_test.py new file mode 100644 index 000000000..28d49080f --- /dev/null +++ b/cosmos_framework/utils/generator/lora_test.py @@ -0,0 +1,83 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: OpenMDW-1.1 + +from __future__ import annotations + +import torch + +from cosmos_framework.utils.generator.lora import ( + LoraInjectedLinear, + apply_lora_trainable_scope, + inject_lora_pre_fsdp, + merge_lora_adapters_, +) + + +class _Tiny(torch.nn.Module): + def __init__(self) -> None: + super().__init__() + self.q_proj = torch.nn.Linear(4, 3, bias=True) + self.lm_head = torch.nn.Linear(3, 2, bias=False) + + +def test_vlm_lora_preserves_base_keys_and_reports_trainable_scope() -> None: + model = _Tiny() + base_keys = set(model.state_dict()) + inject_lora_pre_fsdp( + model, + lora_rank=2, + lora_alpha=4, + lora_target_modules="q_proj", + lora_dropout=0.0, + lora_bias="lora_only", + lora_modules_to_save="lm_head", + ) + + assert isinstance(model.q_proj, LoraInjectedLinear) + assert base_keys <= set(model.state_dict()) + assert model.q_proj.weight.requires_grad is False + assert model.q_proj.bias.requires_grad is True + assert model.lm_head.weight.requires_grad is True + assert model.q_proj.lora_A.weight.requires_grad is True + assert model._tao_peft_parameter_summary == { + "training_mode": "peft", + "trainable_parameters": 23, + "total_parameters": 35, + "frozen_parameters": 12, + "trainable_parameter_tensors": 4, + "adapter_module_count": 1, + "adapter_modules": ["q_proj"], + } + + model.requires_grad_(True) + summary = apply_lora_trainable_scope( + model, + lora_target_modules="q_proj", + lora_bias="lora_only", + lora_modules_to_save="lm_head", + ) + assert summary == model._tao_peft_parameter_summary + assert model.q_proj.weight.requires_grad is False + assert model.q_proj.bias.requires_grad is True + assert model.lm_head.weight.requires_grad is True + assert model.q_proj.lora_A.weight.requires_grad is True + + +def test_rslora_merge_matches_unmerged_forward() -> None: + model = _Tiny() + inject_lora_pre_fsdp( + model, + lora_rank=2, + lora_alpha=4, + lora_target_modules="q_proj", + lora_use_rslora=True, + ) + torch.nn.init.normal_(model.q_proj.lora_A.weight) + torch.nn.init.normal_(model.q_proj.lora_B.weight) + values = torch.randn(2, 4) + expected = model.q_proj(values) + assert merge_lora_adapters_(model) == 1 + with torch.no_grad(): + model.q_proj.lora_A.weight.zero_() + model.q_proj.lora_B.weight.zero_() + torch.testing.assert_close(model.q_proj(values), expected) From 5d18a8cc481ce72cfcd3069af7ffbac6a6bfd640 Mon Sep 17 00:00:00 2001 From: Ramanathan Arunachalam Date: Thu, 1 Oct 2026 19:18:59 +0000 Subject: [PATCH 09/17] perf(reasoner): optimize vision attention and repeated-video validation Batch uniform vision attention chunks and cache deterministic validation features without desynchronizing distributed ranks. Honor frozen-weight precision without FSDP, deterministic FlashAttention, and cuDNN 9.15 support. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Ramanathan Arunachalam --- .../model/attention/cudnn/__init__.py | 14 +- cosmos_framework/model/generator/hf_model.py | 216 +++++++++++++++++- .../hf_model_validation_cache_test.py | 68 ++++++ .../model/generator/parallelize_vlm.py | 32 ++- .../utils/generator/flash_attn.py | 12 +- .../utils/generator/monkey_patch.py | 116 ++++++++++ 6 files changed, 447 insertions(+), 11 deletions(-) create mode 100644 cosmos_framework/model/generator/hf_model_validation_cache_test.py diff --git a/cosmos_framework/model/attention/cudnn/__init__.py b/cosmos_framework/model/attention/cudnn/__init__.py index e6c2e8d34..d2bb40241 100644 --- a/cosmos_framework/model/attention/cudnn/__init__.py +++ b/cosmos_framework/model/attention/cudnn/__init__.py @@ -13,8 +13,18 @@ from cosmos_framework.model.attention.utils.safe_ops import log # Minimum cuDNN runtime version, in ``torch.backends.cudnn.version()`` encoding -# (major * 10000 + minor * 100 + patch). 92000 == cuDNN 9.20.0. -CUDNN_MIN_BACKEND_VERSION = 92000 +# (major * 10000 + minor * 100 + patch). 91500 == cuDNN 9.15.0. +# +# This backend dispatches through PyTorch's own cuDNN SDPA ATen op, which is +# present and correct from 9.15. Requiring 9.20 silently excluded the whole +# cuDNN path on stacks shipping 9.15.1 -- on Blackwell that left NATTEN as the +# only survivor, since the arch-103 preference order is cudnn/natten/flash2 and +# flash2 needs a flash-attn package the CUDA base image does not carry. +# Measured on a GB300 (cuDNN 91501): cuDNN attention matched the other fused +# backends numerically (max|err| 0.01562 against the math reference, identical +# to FLASH and EFFICIENT) and cut Cosmos3-Nano LoRA SFT from 2.94s/step to +# 2.62s/step with training loss preserved. +CUDNN_MIN_BACKEND_VERSION = 91500 def cudnn_supported() -> bool: diff --git a/cosmos_framework/model/generator/hf_model.py b/cosmos_framework/model/generator/hf_model.py index 15d1a7019..9d507236b 100644 --- a/cosmos_framework/model/generator/hf_model.py +++ b/cosmos_framework/model/generator/hf_model.py @@ -22,8 +22,11 @@ """ import inspect +import os +from collections import OrderedDict from collections.abc import Iterator -from typing import TYPE_CHECKING +from types import MethodType +from typing import TYPE_CHECKING, Callable import torch import torch.nn as nn @@ -31,13 +34,13 @@ from transformers import AutoConfig, AutoModel, AutoModelForCausalLM, AutoModelForImageTextToText, AutoTokenizer import cosmos_framework.model.generator.reasoner.cosmos3_edge # noqa: F401 registers cosmos3_edge with transformers Auto classes -from cosmos_framework.utils import log from cosmos_framework.model.generator.reasoner.qwen35_caption import ( Qwen35CaptionLoss, configure_qwen35_caption_model, named_parameters_with_qwen35_decay, ) from cosmos_framework.model.generator.utils.safetensors_loader import load_language_model, load_vlm_model +from cosmos_framework.utils import log from cosmos_framework.utils.generator.input_probe import maybe_dump_pre_forward from cosmos_framework.utils.generator.parallelism import ParallelDims @@ -45,6 +48,135 @@ from cosmos_framework.configs.base.defaults.reasoner import SoundUnderstandingConfig +class _ValidationVideoFeatureCache: + """Rank-local GPU LRU for deterministic, repeated validation videos.""" + + def __init__(self, capacity: int): + self.capacity = capacity + self.entries: OrderedDict[tuple, tuple] = OrderedDict() + self.calls = 0 + self.hits = 0 + self.misses = 0 + self.sync_dummy_encodes = 0 + self.global_all_hit_calls = 0 + self.bypassed_calls = 0 + self.hit_attested = False + + @staticmethod + def _distributed_flag(value: bool, device: torch.device, op: torch.distributed.ReduceOp) -> bool: + if not (torch.distributed.is_available() and torch.distributed.is_initialized()): + return value + flag = torch.tensor([int(value)], device=device, dtype=torch.int32) + torch.distributed.all_reduce(flag, op=op) + return bool(flag.item()) + + def get_or_encode( + self, + cache_keys: list[str] | tuple[str, ...] | None, + pixel_values: torch.Tensor, + grid_thw: torch.Tensor, + encode_fn: Callable, + spatial_merge_size: int, + ): + local_cacheable = ( + grid_thw is not None + and grid_thw.ndim == 2 + and isinstance(cache_keys, (list, tuple)) + and len(cache_keys) == int(grid_thw.shape[0]) + ) + grids: list[tuple[int, ...]] = [] + raw_sizes: list[int] = [] + if local_cacheable: + grids = [tuple(int(value) for value in row.detach().cpu().tolist()) for row in grid_thw] + raw_sizes = [grid[0] * grid[1] * grid[2] for grid in grids] + local_cacheable = sum(raw_sizes) == int(pixel_values.shape[0]) + + globally_cacheable = self._distributed_flag( + local_cacheable, pixel_values.device, torch.distributed.ReduceOp.MIN + ) + if not globally_cacheable: + self.bypassed_calls += 1 + return encode_fn(pixel_values, grid_thw) + + merged_sizes = [size // (spatial_merge_size**2) for size in raw_sizes] + resolved_keys = [(str(key), grid) for key, grid in zip(cache_keys, grids)] + pixel_chunks = torch.split(pixel_values, raw_sizes, dim=0) + available: dict[tuple, tuple] = {} + missing: OrderedDict[tuple, int] = OrderedDict() + call_hits = 0 + for index, key in enumerate(resolved_keys): + entry = self.entries.get(key) + if entry is None: + missing.setdefault(key, index) + else: + self.entries.move_to_end(key) + available[key] = entry + call_hits += 1 + + any_rank_missing = self._distributed_flag(bool(missing), pixel_values.device, torch.distributed.ReduceOp.MAX) + if any_rank_missing and missing: + miss_indices = list(missing.values()) + miss_pixels = torch.cat([pixel_chunks[index] for index in miss_indices], dim=0) + miss_grids = torch.stack([grid_thw[index] for index in miss_indices], dim=0) + fresh_main, fresh_deepstack = encode_fn(miss_pixels, miss_grids) + fresh_main_splits = torch.split( + fresh_main, + [merged_sizes[index] for index in miss_indices], + dim=0, + ) + deepstack_splits = [ + torch.split(layer, [merged_sizes[index] for index in miss_indices], dim=0) for layer in fresh_deepstack + ] + for fresh_index, key in enumerate(missing): + entry = ( + fresh_main_splits[fresh_index].detach().clone(), + tuple(parts[fresh_index].detach().clone() for parts in deepstack_splits), + ) + available[key] = entry + self.entries[key] = entry + self.entries.move_to_end(key) + while len(self.entries) > self.capacity: + self.entries.popitem(last=False) + elif any_rank_missing: + encode_fn(pixel_chunks[0], grid_thw[:1]) + self.sync_dummy_encodes += 1 + else: + self.global_all_hit_calls += 1 + + ordered = [available[key] for key in resolved_keys] + main = torch.cat([entry[0] for entry in ordered], dim=0) + deepstack = [ + torch.cat([entry[1][layer] for entry in ordered], dim=0) + for layer in range(len(ordered[0][1]) if ordered else 0) + ] + self.calls += 1 + self.hits += call_hits + self.misses += len(missing) + if call_hits and not self.hit_attested: + print( + "TAO_FRAMEWORK_VALIDATION_FEATURE_CACHE_HIT_ATTESTATION " + f"rank={os.environ.get('RANK', '0')} capacity={self.capacity} hits={call_hits}", + flush=True, + ) + self.hit_attested = True + return main, deepstack + + def clear(self) -> dict[str, int]: + stats = { + "calls": self.calls, + "hits": self.hits, + "misses": self.misses, + "entries": len(self.entries), + "sync_dummy_encodes": self.sync_dummy_encodes, + "global_all_hit_calls": self.global_all_hit_calls, + "bypassed_calls": self.bypassed_calls, + } + self.entries.clear() + self.calls = self.hits = self.misses = 0 + self.sync_dummy_encodes = self.global_all_hit_calls = self.bypassed_calls = 0 + return stats + + def _tensor_names_to_skip_for(model_type: str) -> list[str]: """Per-model-type tensor-name regex skip list for load_vlm_model. @@ -173,9 +305,9 @@ def __init__( ) if sound_und: + from cosmos_framework.data.generator.processors.audio_utils import add_reasoner_audio_special_tokens from cosmos_framework.model.generator.reasoner.audio.registry import get_audio_encoder_backend from cosmos_framework.model.generator.reasoner.audio.utils import patch_reasoner_audio_forward - from cosmos_framework.data.generator.processors.audio_utils import add_reasoner_audio_special_tokens audio_backend = get_audio_encoder_backend(sound_und_config.audio_encoder_type) @@ -247,6 +379,10 @@ def __init__( if n_cast: log.info(f"HFModel: normalized {n_cast} param(s) to {dtype} post-from_config") + self._tao_validation_video_cache_keys = None + self._tao_validation_video_cache_active = False + self._tao_validation_video_feature_cache = None + if hf_config.model_type == "qwen3_5": configure_qwen35_caption_model( self.model, @@ -288,6 +424,14 @@ def __init__( n_vision_attns = patch_qwen3_vl_vision_varlen_attention(self.model) log.info(f"HFModel: applied varlen attention to {n_vision_attns} vision attention module(s)") + elif hf_config.model_type == "qwen3_vl" and hasattr(self.model, "model"): + # Preserve the parent's batched fallback for sdpa/eager without + # replacing the upstream cosmos varlen attention implementation. + if os.environ.get("TAO_FRAMEWORK_BATCH_VISION_ATTENTION", "1") not in {"0", "false", "no"}: + from cosmos_framework.utils.generator.monkey_patch import patch_qwen3_vl_vision_attention + + patch_qwen3_vl_vision_attention(self.model.model) + if torch.are_deterministic_algorithms_enabled(): from cosmos_framework.utils.generator.monkey_patch import patch_siglip2_pos_embed_antialias_off @@ -295,8 +439,62 @@ def __init__( if type(m).__name__ == "Siglip2VisionTransformer": patch_siglip2_pos_embed_antialias_off(m) + # Wrap the final visual entrypoint, including the upstream varlen wrapper. + self._configure_validation_video_feature_cache() + + def _configure_validation_video_feature_cache(self) -> None: + capacity = int(os.environ.get("TAO_FRAMEWORK_VALIDATION_VIDEO_FEATURE_CACHE_SIZE", "0")) + if capacity < 0: + raise ValueError("TAO_FRAMEWORK_VALIDATION_VIDEO_FEATURE_CACHE_SIZE must be non-negative") + if capacity == 0: + return + if self.hf_config.model_type != "qwen3_vl": + raise RuntimeError("Framework validation feature cache currently supports only qwen3_vl") + target = getattr(self.model, "model", None) + visual = getattr(target, "visual", None) + original = getattr(visual, "forward", None) + spatial_merge_size = getattr(visual, "spatial_merge_size", None) + if target is None or not callable(original) or not spatial_merge_size: + raise RuntimeError("Framework validation feature cache could not resolve Qwen3-VL vision encoder") + cache = _ValidationVideoFeatureCache(capacity) + + def cached_visual_forward(visual_self, pixel_values, grid_thw=None): + del visual_self + if not self._tao_validation_video_cache_active: + return original(pixel_values, grid_thw) + return cache.get_or_encode( + self._tao_validation_video_cache_keys, + pixel_values, + grid_thw, + original, + int(spatial_merge_size), + ) + + # c312482 applies ``patch_qwen3_vl_forward``, whose active video path + # invokes ``self.visual(...)`` directly and bypasses both + # ``get_video_features`` and ``get_image_features``. Hook the actual + # visual boundary so repeated validation media can reuse deterministic + # features. FSDP's per-block collectives remain aligned by + # ``get_or_encode``: if any rank misses, every rank enters the native + # visual stack once; only a global all-hit batch skips it collectively. + visual.forward = MethodType(cached_visual_forward, visual) + self._tao_validation_video_feature_cache = cache + print( + "TAO_FRAMEWORK_VALIDATION_FEATURE_CACHE_ENABLED_ATTESTATION " + f"rank={os.environ.get('RANK', '0')} capacity={capacity} boundary=visual_forward", + flush=True, + ) + + def clear_validation_video_feature_cache(self) -> dict[str, int] | None: + if self._tao_validation_video_feature_cache is None: + return None + return self._tao_validation_video_feature_cache.clear() + def train(self, mode: bool = True) -> "HFModel": """Keep immutable audio modules in eval mode while training the Reasoner.""" + if mode and self._tao_validation_video_feature_cache is not None: + if self._tao_validation_video_feature_cache.entries: + self.clear_validation_video_feature_cache() super().train(mode) if self.sound_und: self.model.sound_und_model.encoder.eval() @@ -531,6 +729,7 @@ def forward(self, **kwargs) -> torch.Tensor | Qwen35CaptionLoss: right-padding + causal attention, valid tokens never attend to padding tokens regardless, so dropping attention_mask is equivalent and avoids the shape mismatch. """ + cache_keys = kwargs.pop("tao_video_cache_keys", None) probe_step = kwargs.pop("_probe_step", None) probe_tag = kwargs.pop("_probe_tag", None) forward_keys = self._forward_keys @@ -543,5 +742,14 @@ def forward(self, **kwargs) -> torch.Tensor | Qwen35CaptionLoss: filtered.pop("attention_mask", None) filtered["use_cache"] = False maybe_dump_pre_forward(self.model, filtered, probe_step, probe_tag) - out = self.model(**filtered) + cache = self._tao_validation_video_feature_cache + self._tao_validation_video_cache_active = ( + cache is not None and not self.training and not torch.is_grad_enabled() + ) + self._tao_validation_video_cache_keys = cache_keys + try: + out = self.model(**filtered) + finally: + self._tao_validation_video_cache_keys = None + self._tao_validation_video_cache_active = False return out if isinstance(out, Qwen35CaptionLoss) else out.logits diff --git a/cosmos_framework/model/generator/hf_model_validation_cache_test.py b/cosmos_framework/model/generator/hf_model_validation_cache_test.py new file mode 100644 index 000000000..e2c97d8f0 --- /dev/null +++ b/cosmos_framework/model/generator/hf_model_validation_cache_test.py @@ -0,0 +1,68 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: OpenMDW-1.1 + +from __future__ import annotations + +import torch + +from cosmos_framework.model.generator.hf_model import _ValidationVideoFeatureCache + + +def _visual_encoder(calls: list[tuple[int, int]]): + def encode(pixel_values: torch.Tensor, grid_thw: torch.Tensor): + calls.append((int(pixel_values.shape[0]), int(grid_thw.shape[0]))) + raw_sizes = [int(row.prod().item()) for row in grid_thw] + chunks = torch.split(pixel_values, raw_sizes, dim=0) + # spatial_merge_size=2 makes every [1, 2, 2] test grid one output row. + main = torch.stack([chunk.sum(dim=0) for chunk in chunks]) + return main, [main + 10, main + 20] + + return encode + + +def test_validation_feature_cache_preserves_visual_forward_contract() -> None: + cache = _ValidationVideoFeatureCache(capacity=3) + calls: list[tuple[int, int]] = [] + encode = _visual_encoder(calls) + grid = torch.tensor([[1, 2, 2], [1, 2, 2]]) + pixels = torch.arange(24, dtype=torch.float32).reshape(8, 3) + + first_main, first_deep = cache.get_or_encode( + ["video-a", "video-b"], pixels, grid, encode, spatial_merge_size=2 + ) + second_main, second_deep = cache.get_or_encode( + ["video-a", "video-b"], pixels + 1000, grid, encode, spatial_merge_size=2 + ) + + assert calls == [(8, 2)] + assert isinstance(second_main, torch.Tensor) + assert torch.equal(second_main, first_main) + assert all(torch.equal(actual, expected) for actual, expected in zip(second_deep, first_deep)) + assert cache.hits == 2 + assert cache.misses == 2 + assert cache.global_all_hit_calls == 1 + + third_main, _ = cache.get_or_encode( + ["video-a", "video-c"], pixels + 1000, grid, encode, spatial_merge_size=2 + ) + assert calls == [(8, 2), (4, 1)] + assert torch.equal(third_main[0], first_main[0]) + assert not torch.equal(third_main[1], first_main[1]) + assert cache.hits == 3 + assert cache.misses == 3 + + +def test_validation_feature_cache_bypasses_unkeyed_visual_input() -> None: + cache = _ValidationVideoFeatureCache(capacity=1) + calls: list[tuple[int, int]] = [] + encode = _visual_encoder(calls) + grid = torch.tensor([[1, 2, 2]]) + pixels = torch.ones(4, 3) + + main, deep = cache.get_or_encode(None, pixels, grid, encode, spatial_merge_size=2) + + assert calls == [(4, 1)] + assert main.shape == (1, 3) + assert len(deep) == 2 + assert cache.bypassed_calls == 1 + assert cache.entries == {} diff --git a/cosmos_framework/model/generator/parallelize_vlm.py b/cosmos_framework/model/generator/parallelize_vlm.py index d4be9bc8a..6951e6dad 100644 --- a/cosmos_framework/model/generator/parallelize_vlm.py +++ b/cosmos_framework/model/generator/parallelize_vlm.py @@ -28,7 +28,6 @@ create_selective_checkpoint_contexts, ) -from cosmos_framework.utils import log from cosmos_framework.configs.base.defaults.activation_checkpointing import ActivationCheckpointingConfig from cosmos_framework.configs.base.defaults.compile import CompileConfig from cosmos_framework.configs.base.defaults.parallelism import ( @@ -37,6 +36,7 @@ ) from cosmos_framework.model.generator.hf_model import HFModel from cosmos_framework.model.generator.reasoner.qwen35_caption import qwen35_fp32_decay_modules +from cosmos_framework.utils import log from cosmos_framework.utils.generator.parallelism import ParallelDims, fsdp_mesh # (parent, attribute name, module) — the module currently registered at that slot, plus what @@ -417,7 +417,35 @@ def apply_fsdp( (``"bfloat16"``, ``"float16"``, or ``"float32"``). """ if not parallel_dims.dp_enabled: - log.info("parallelize: no data-parallel axis (dp_shard == dp_replicate == 1) — skipping FSDP2 wrapping") + # ``precision`` is normally delivered through MixedPrecisionPolicy, which + # only gets attached by ``fully_shard`` below. Returning here leaves the + # network in whatever dtype the checkpoint loaded as -- fp32 for a + # Qwen3-VL base -- so every matmul dispatches to SIMT fp32 CUTLASS + # kernels instead of tensor cores. On a GB300 that measured 3.97ms + # against 0.14ms for the same bf16 GEMM, and fp32 ``aten::mm`` accounted + # for 89% of training CUDA time. Multi-GPU runs never saw it because + # dp_shard > 1 attaches the policy. + # + # Cast the FROZEN parameters to the configured compute dtype. Trainable + # parameters are deliberately untouched so optimizer state keeps the + # precision it was built with, which mirrors what MixedPrecisionPolicy + # does for master weights. + target_dtype = PRECISION_TO_TORCH_DTYPE[precision] + converted = 0 + with torch.no_grad(): + for parameter in model.parameters(): + if ( + not parameter.requires_grad + and parameter.dtype.is_floating_point + and parameter.dtype != target_dtype + ): + parameter.data = parameter.data.to(target_dtype) + converted += 1 + log.info( + f"parallelize: no data-parallel axis — skipping FSDP2 wrapping; cast " + f"{converted} frozen parameters to {precision} so the compute dtype " + f"still matches the configured precision" + ) return # ``fsdp_reduce_dtype`` overrides the gradient-reduction dtype; ``None`` follows the diff --git a/cosmos_framework/utils/generator/flash_attn.py b/cosmos_framework/utils/generator/flash_attn.py index 931fd0a71..8715d1f88 100644 --- a/cosmos_framework/utils/generator/flash_attn.py +++ b/cosmos_framework/utils/generator/flash_attn.py @@ -33,9 +33,8 @@ def init_flash_attn_meta(deterministic: bool = False) -> None: configure_training() did. Args: - deterministic: If True, enables PyTorch and CuDNN deterministic modes. - HF flash_attention_2 respects torch.backends.cudnn.deterministic - and torch.use_deterministic_algorithms(). + deterministic: If True, enables PyTorch, CuDNN and FlashAttention + deterministic modes. """ if deterministic: import torch @@ -44,3 +43,10 @@ def init_flash_attn_meta(deterministic: bool = False) -> None: torch.backends.cuda.enable_cudnn_sdp(False) torch.use_deterministic_algorithms(True, warn_only=False) os.environ.setdefault("CUBLAS_WORKSPACE_CONFIG", ":4096:8") + # FlashAttention-2 is a separate CUDA extension whose backward uses + # atomics, so torch.use_deterministic_algorithms cannot police it -- it + # reports nothing even with warn_only=False. Transformers picks FA2's + # deterministic backward up from this environment variable in + # modeling_flash_attention_utils, so without it two same-seed runs + # diverge within a few steps despite every setting above. + os.environ.setdefault("FLASH_ATTENTION_DETERMINISTIC", "1") diff --git a/cosmos_framework/utils/generator/monkey_patch.py b/cosmos_framework/utils/generator/monkey_patch.py index af62667cc..00ec29598 100644 --- a/cosmos_framework/utils/generator/monkey_patch.py +++ b/cosmos_framework/utils/generator/monkey_patch.py @@ -281,6 +281,122 @@ def patched_forward( log.critical(f"Patched {type(model).__name__} instance forward with one visual call per forward") +def patch_qwen3_vl_vision_attention(model) -> int: + """Batch the vision tower's equal-length attention chunks into one call. + + Upstream ``Qwen3VLVisionAttention.forward`` reserves its packed path for + FlashAttention-2, which consumes ``cu_seqlens`` directly and issues a single + varlen kernel. Every other backend takes the fallback, which splits q/k/v on + ``cu_seqlens`` and loops:: + + splits = [torch.split(t, lengths.tolist(), dim=2) for t in (q, k, v)] + attn_outputs = [attention_interface(self, q, k, v, ...) for q, k, v in zip(*splits)] + + That is one attention call per chunk per block. FlashAttention-2 is unavailable + on this stack -- there is no aarch64 flash-attn wheel for the CUDA base image -- + so the fallback is what actually runs, and it dominates the step. + + Measured on a GB300 with Cosmos3-Nano at batch 31: 124 chunks x 27 blocks = + 3,348 attention calls per step, every one of shape ``[1, 16, 32, 72]``, costing + 161us of CPU dispatch for 3.6us of GPU work. The GPU sat idle roughly 90% of the + step while the host queued kernels. + + When every chunk is the same length -- which holds whenever the batch is uniform + in resolution and frame count -- the loop is exactly a batched attention over the + chunk axis, so the chunks can be folded into dim 0 and issued as one call. This + is an algebraic identity, not an approximation: attention does not mix across + chunks in either form, and each chunk keeps its own softmax normalisation. + + Falls back to the stock implementation when chunk lengths differ, so a ragged + batch stays correct rather than silently attending across chunk boundaries. + + Returns the number of attention modules patched. + """ + from transformers.modeling_utils import ALL_ATTENTION_FUNCTIONS + from transformers.models.qwen3_vl.modeling_qwen3_vl import ( + apply_rotary_pos_emb_vision, + eager_attention_forward, + ) + + def batched_forward( + self, + hidden_states: torch.Tensor, + cu_seqlens: torch.Tensor, + position_embeddings: tuple[torch.Tensor, torch.Tensor], + **kwargs, + ): + seq_length = hidden_states.shape[0] + query_states, key_states, value_states = ( + self.qkv(hidden_states).reshape(seq_length, 3, self.num_heads, -1).permute(1, 0, 2, 3).unbind(0) + ) + cos, sin = position_embeddings + query_states, key_states = apply_rotary_pos_emb_vision(query_states, key_states, cos, sin) + + query_states = query_states.transpose(0, 1).unsqueeze(0) + key_states = key_states.transpose(0, 1).unsqueeze(0) + value_states = value_states.transpose(0, 1).unsqueeze(0) + + attention_interface = eager_attention_forward + if self.config._attn_implementation != "eager": + attention_interface = ALL_ATTENTION_FUNCTIONS[self.config._attn_implementation] + + lengths = cu_seqlens[1:] - cu_seqlens[:-1] + chunk = int(lengths[0]) + uniform = bool(torch.all(lengths == lengths[0])) + + if uniform and chunk > 0: + # [1, heads, chunks * chunk, dim] -> [chunks, heads, chunk, dim]. The chunk + # axis becomes the batch axis, which is what the loop was expressing. + chunks = query_states.shape[2] // chunk + + def _fold(t): + return t.squeeze(0).reshape(self.num_heads, chunks, chunk, -1).permute(1, 0, 2, 3).contiguous() + + attn_output, _ = attention_interface( + self, + _fold(query_states), + _fold(key_states), + _fold(value_states), + attention_mask=None, + scaling=self.scaling, + dropout=0.0 if not self.training else self.attention_dropout, + is_causal=False, + **kwargs, + ) + # attention_interface returns [chunks, chunk, heads, dim]; restore token order. + attn_output = attn_output.reshape(chunks * chunk, self.num_heads, -1) + else: + splits = [ + torch.split(tensor, lengths.tolist(), dim=2) for tensor in (query_states, key_states, value_states) + ] + attn_outputs = [ + attention_interface( + self, + q, + k, + v, + attention_mask=None, + scaling=self.scaling, + dropout=0.0 if not self.training else self.attention_dropout, + is_causal=False, + **kwargs, + )[0] + for q, k, v in zip(*splits) + ] + attn_output = torch.cat(attn_outputs, dim=1).squeeze(0) + + attn_output = attn_output.reshape(seq_length, -1).contiguous() + return self.proj(attn_output) + + patched = 0 + for module in model.modules(): + if type(module).__name__ == "Qwen3VLVisionAttention": + module.forward = batched_forward.__get__(module, type(module)) + patched += 1 + log.critical(f"Patched {patched} Qwen3VLVisionAttention module(s) to batch equal-length chunks") + return patched + + def patch_qwen3_vl_moe_grouped_mm_experts(model: torch.nn.Module) -> int: """Monkey-patch every ``Qwen3VLMoeTextSparseMoeBlock`` **instance** under ``model`` to run its experts through ``torch._grouped_mm`` instead of HF's per-expert Python loop. From f80de9e07f505fe0fb87312fd96061588be8a530 Mon Sep 17 00:00:00 2001 From: Ramanathan Arunachalam Date: Thu, 1 Oct 2026 19:18:59 +0000 Subject: [PATCH 10/17] feat(training): add epoch scheduling and structured lifecycle reporting Expose checkpoint and validation cadence through TOML, report progress and terminal failures, and handle padded checkpoint markers. Preserve ranked loss logs and resolve configuration types without optional Megatron. --- cosmos_framework/callbacks/iter_speed.py | 2 +- cosmos_framework/callbacks/tao_status.py | 567 ++++++++++++++++++ cosmos_framework/callbacks/tao_status_test.py | 159 +++++ cosmos_framework/checkpoint/base.py | 5 +- cosmos_framework/checkpoint/dcp.py | 9 +- cosmos_framework/checkpoint/dcp_distill.py | 13 +- cosmos_framework/checkpoint/dummy.py | 1 + .../base/reasoner/defaults/callbacks.py | 17 +- .../configs/toml_config/sft_config.py | 121 +++- .../configs/toml_config/sft_config_test.py | 71 +++ .../configs/toml_config/toml_config_helper.py | 22 +- cosmos_framework/scripts/train.py | 112 ++-- cosmos_framework/trainer/__init__.py | 84 ++- cosmos_framework/utils/callback.py | 9 +- cosmos_framework/utils/checkpointer.py | 10 +- cosmos_framework/utils/config.py | 21 +- .../utils/reasoner/dcp_checkpointer.py | 7 +- 17 files changed, 1100 insertions(+), 130 deletions(-) create mode 100644 cosmos_framework/callbacks/tao_status.py create mode 100644 cosmos_framework/callbacks/tao_status_test.py diff --git a/cosmos_framework/callbacks/iter_speed.py b/cosmos_framework/callbacks/iter_speed.py index 2ef103c87..aebf44578 100644 --- a/cosmos_framework/callbacks/iter_speed.py +++ b/cosmos_framework/callbacks/iter_speed.py @@ -114,7 +114,7 @@ def on_training_step_end( ) -> None: if self.hit_counter < self.hit_thres: log.info( - f"Iteration {iteration}: " + f"[RANK {log.RANK}] Iteration {iteration}: " f"Hit counter: {self.hit_counter + 1}/{self.hit_thres} | " f"Loss: {loss.detach().item():.4f} | " f"Time: {time.time() - self.last_hit_time:.2f}s", diff --git a/cosmos_framework/callbacks/tao_status.py b/cosmos_framework/callbacks/tao_status.py new file mode 100644 index 000000000..90df8f428 --- /dev/null +++ b/cosmos_framework/callbacks/tao_status.py @@ -0,0 +1,567 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: OpenMDW-1.1 + +"""TAO-compatible lifecycle and metric logging for Cosmos Framework training.""" + +from __future__ import annotations + +import json +import os +import time +from datetime import datetime, timedelta +from pathlib import Path +from typing import Any + +import torch +import torch.distributed as dist + +from cosmos_framework.utils import distributed, log +from cosmos_framework.utils.callback import Callback + + +def _to_json_value(value: Any) -> Any: + """Recursively convert tensors and array-like values to JSON-safe values.""" + if isinstance(value, dict): + return {str(key): _to_json_value(item) for key, item in value.items()} + if isinstance(value, (list, tuple)): + return [_to_json_value(item) for item in value] + if isinstance(value, torch.Tensor): + value = value.detach() + if value.numel() == 1: + return value.item() + return value.cpu().tolist() + if hasattr(value, "item"): + try: + return value.item() + except (TypeError, ValueError): + pass + if hasattr(value, "tolist"): + try: + return value.tolist() + except (TypeError, ValueError): + pass + return value + + +class _TAOStatusWriter: + """Use TAO Core when available, with a compatible JSON-lines fallback.""" + + def __init__(self, filename: str) -> None: + self.filename = filename + Path(filename).parent.mkdir(parents=True, exist_ok=True) + self._tao_logger = None + self._tao_status = None + self._tao_verbosity = None + + try: + from nvidia_tao_core.loggers.logging import Status, StatusLogger, Verbosity + except ImportError: + log.warning(f"nvidia_tao_core is not installed; writing TAO-compatible JSON records directly to {filename}") + else: + self._tao_status = Status + self._tao_verbosity = Verbosity + self._tao_logger = StatusLogger( + filename=filename, + is_master=True, + verbosity=Verbosity.INFO, + append=True, + ) + + def write( + self, + *, + status: str, + message: str, + data: dict[str, Any] | None = None, + kpi: dict[str, Any] | None = None, + verbosity: str = "INFO", + ) -> None: + data = _to_json_value(data or {}) + kpi = _to_json_value(kpi or {}) + + if self._tao_logger is not None: + status_level = getattr(self._tao_status, status) + verbosity_level = getattr(self._tao_verbosity, verbosity) + self._tao_logger.kpi = kpi + self._tao_logger.write( + data=data, + status_level=status_level, + verbosity_level=verbosity_level, + message=message, + ) + return + + now = datetime.now() + payload: dict[str, Any] = { + **data, + "date": f"{now.month}/{now.day}/{now.year}", + "time": f"{now.hour}:{now.minute}:{now.second}", + "status": status, + "verbosity": verbosity, + "message": message, + } + if kpi: + payload["kpi"] = kpi + with open(self.filename, "a", encoding="utf-8") as status_file: + status_file.write(json.dumps(payload, default=str) + "\n") + + +def write_early_failure(error: BaseException) -> bool: + """Write a terminal TAO record before the callback/config exists. + + The orchestration layer supplies ``TAO_STATUS_FILE`` for direct launches, + or the normal TAO job/result variables. No implicit host path is used. + """ + status_path = os.environ.get("TAO_STATUS_FILE") + if not status_path: + job_id = os.environ.get("TAO_JOB_ID") + results_root = os.environ.get("TAO_RESULTS_ROOT") + if job_id and results_root: + status_path = os.path.join(results_root, job_id, "status.json") + if not status_path: + api_job_id = os.environ.get("TAO_API_JOB_ID") + results_root = os.environ.get("TAO_API_RESULTS_DIR") + if api_job_id and results_root: + status_path = os.path.join(results_root, api_job_id, "status.json") + if not status_path: + return False + _TAOStatusWriter(status_path).write( + status="FAILURE", + verbosity="ERROR", + message=f"Cosmos Framework training failed before callback initialization: {error}", + data={"phase": "preflight_or_initialization", "error_type": type(error).__name__}, + ) + return True + + +class TAOStatusCallback(Callback): + """Write TAO lifecycle, training, and validation records from rank zero. + + The output path is resolved in this order: + + 1. ``status_file_path`` when explicitly configured. + 2. ``$TAO_RESULTS_ROOT/$TAO_JOB_ID/status.json`` (TAO SDK). + 3. ``$TAO_API_RESULTS_DIR/$TAO_API_JOB_ID/status.json`` (TAO API). + 4. ``/status.json`` for direct launches. + """ + + def __init__( + self, + enabled: bool = False, + status_file_path: str | None = None, + experiment_name: str = "", + logging_interval: int = 1, + validation_heartbeat_interval: int = 1, + ) -> None: + if logging_interval < 1: + raise ValueError("logging_interval must be >= 1") + if validation_heartbeat_interval < 1: + raise ValueError("validation_heartbeat_interval must be >= 1") + self.enabled = enabled + self.status_file_path = status_file_path + self.experiment_name = experiment_name + self.logging_interval = logging_interval + self.validation_heartbeat_interval = validation_heartbeat_interval + self._writer: _TAOStatusWriter | None = None + self._train_start_time = 0.0 + self._step_start_time = 0.0 + self._validation_batches = 0 + self._validation_loss_numerator = 0.0 + self._validation_loss_denominator = 0 + self._validation_local_numerators: list[torch.Tensor] = [] + self._validation_local_denominators: list[torch.Tensor] = [] + self._train_loss_numerator = 0.0 + self._train_loss_denominator = 0 + self.last_training_loss: float | None = None + self.last_validation_loss: float | None = None + + def _is_rank_zero(self) -> bool: + if dist.is_available() and dist.is_initialized(): + return distributed.is_rank0() + return int(os.environ.get("RANK", os.environ.get("LOCAL_RANK", "0"))) == 0 + + def _component_name(self) -> str: + if self.experiment_name: + return self.experiment_name + return getattr(self.config.job, "name", "Cosmos Framework SFT") + + def _resolve_status_file(self) -> str: + if self.status_file_path: + return self.status_file_path + + job_id = os.environ.get("TAO_JOB_ID") + if job_id: + results_root = os.environ.get("TAO_RESULTS_ROOT") + if not results_root: + raise RuntimeError("TAO_RESULTS_ROOT is required when TAO_JOB_ID is set") + return os.path.join(results_root, job_id, "status.json") + + api_job_id = os.environ.get("TAO_API_JOB_ID") + if api_job_id: + results_root = os.environ.get("TAO_API_RESULTS_DIR") + if not results_root: + raise RuntimeError("TAO_API_RESULTS_DIR is required when TAO_API_JOB_ID is set") + return os.path.join(results_root, api_job_id, "status.json") + + return os.path.join(self.config.job.path_local, "status.json") + + def _get_writer(self) -> _TAOStatusWriter | None: + if not self.enabled or not self._is_rank_zero(): + return None + if self._writer is None: + self._writer = _TAOStatusWriter(self._resolve_status_file()) + return self._writer + + def _progress_data(self, iteration: int, seconds_per_step: float | None = None) -> dict[str, Any]: + trainer = getattr(self, "trainer", None) + max_step = int(getattr(trainer, "max_iterations", self.config.trainer.max_iter)) + if seconds_per_step is None: + elapsed = max(time.monotonic() - self._train_start_time, 0.0) + seconds_per_step = elapsed / max(iteration, 1) + eta_seconds = max(max_step - iteration, 0) * seconds_per_step + data = { + "component": self._component_name(), + "step": iteration, + "max_step": max_step, + "time_per_step": str(timedelta(seconds=seconds_per_step)), + "eta": str(timedelta(seconds=eta_seconds)), + } + steps_per_epoch = getattr(trainer, "steps_per_epoch", None) + num_epochs = getattr(trainer, "num_epochs", None) + if steps_per_epoch and num_epochs: + completed_epochs = iteration // steps_per_epoch + if iteration == 0: + epoch = 1 + step_in_epoch = 0 + elif iteration % steps_per_epoch == 0: + epoch = min(completed_epochs, num_epochs) + step_in_epoch = steps_per_epoch + else: + epoch = min(completed_epochs + 1, num_epochs) + step_in_epoch = iteration % steps_per_epoch + data.update( + { + "epoch": epoch, + "max_epoch": num_epochs, + "completed_epochs": min(completed_epochs, num_epochs), + "step_in_epoch": step_in_epoch, + "steps_per_epoch": steps_per_epoch, + "time_per_epoch": str(timedelta(seconds=seconds_per_step * steps_per_epoch)), + } + ) + return data + + def _epoch_label(self, iteration: int) -> str: + progress = self._progress_data(iteration, seconds_per_step=0.0) + if "epoch" not in progress: + return f"training step {iteration}/{progress['max_step']}" + return f"epoch {progress['epoch']}/{progress['max_epoch']}" + + @staticmethod + def _local_token_stats( + loss: torch.Tensor, + data_batch: dict[str, Any], + output_batch: dict[str, Any], + ) -> tuple[torch.Tensor, torch.Tensor]: + numerator = output_batch.get("loss_numerator") + denominator = output_batch.get("loss_denominator") + if numerator is not None and denominator is not None: + return numerator.detach(), denominator.detach().to(dtype=torch.long) + + # Backward-compatible fallback for non-VLM models. It is deliberately + # sample-weighted and is never used by the Cosmos3 VLM path, which + # always emits exact token statistics. + sample_count = next( + ( + int(value.shape[0]) + for value in data_batch.values() + if isinstance(value, torch.Tensor) and value.ndim > 0 + ), + 1, + ) + return ( + loss.detach() * sample_count, + torch.tensor(sample_count, device=loss.device, dtype=torch.long), + ) + + @classmethod + def _global_token_average( + cls, + loss: torch.Tensor, + data_batch: dict[str, Any], + output_batch: dict[str, Any], + ) -> tuple[float, float, int]: + numerator, denominator = cls._local_token_stats(loss, data_batch, output_batch) + numerator = numerator.clone() + denominator = denominator.clone() + if dist.is_available() and dist.is_initialized(): + dist.all_reduce(numerator, op=dist.ReduceOp.SUM) + dist.all_reduce(denominator, op=dist.ReduceOp.SUM) + global_denominator = int(denominator.item()) + global_numerator = float(numerator.item()) + return global_numerator / max(global_denominator, 1), global_numerator, global_denominator + + @staticmethod + def _reduce_accumulator(numerator: float, denominator: int) -> tuple[float, int]: + device = "cuda" if dist.is_available() and dist.is_initialized() else "cpu" + values = torch.tensor([numerator, float(denominator)], dtype=torch.float64, device=device) + if dist.is_available() and dist.is_initialized(): + dist.all_reduce(values, op=dist.ReduceOp.SUM) + return float(values[0].item()), int(values[1].item()) + + def on_train_start(self, model: Any, iteration: int = 0) -> None: + self._train_start_time = time.monotonic() + self._train_loss_numerator = 0.0 + self._train_loss_denominator = 0 + writer = self._get_writer() + if writer is not None: + writer.write( + status="STARTED", + message=f"Starting {self._component_name()} training", + data={ + **self._progress_data(iteration, seconds_per_step=0.0), + "parameter_summary": getattr(model, "parameter_summary", None), + }, + ) + log.info(f"TAO status will be logged to {writer.filename}") + + def on_training_step_start(self, model: Any, data: dict[str, Any], iteration: int = 0) -> None: + self._step_start_time = time.monotonic() + + def on_training_step_batch_end( + self, + model: Any, + data_batch: dict[str, Any], + output_batch: dict[str, Any], + loss: torch.Tensor, + iteration: int = 0, + ) -> None: + numerator, denominator = self._local_token_stats(loss, data_batch, output_batch) + self._train_loss_numerator += float(numerator.item()) + self._train_loss_denominator += int(denominator.item()) + + def on_training_step_end( + self, + model: Any, + data_batch: dict[str, Any], + output_batch: dict[str, Any], + loss: torch.Tensor, + iteration: int = 0, + ) -> None: + interval = int(self.config.trainer.logging_iter) * self.logging_interval + if iteration % interval != 0: + return + + average_loss, numerator, denominator = self._global_token_average(loss, data_batch, output_batch) + writer = self._get_writer() + if writer is None: + return + seconds_per_step = max(time.monotonic() - self._step_start_time, 0.0) + kpi = { + "train/step_loss": average_loss, + "train/step_loss_numerator": numerator, + "train/step_loss_denominator": denominator, + } + progress = self._progress_data(iteration, seconds_per_step=seconds_per_step) + if "epoch" in progress: + message = ( + f"Training epoch {progress['epoch']}/{progress['max_epoch']}, " + f"step {progress['step_in_epoch']}/{progress['steps_per_epoch']} " + f"(global step {iteration}/{progress['max_step']}) - Loss: {average_loss:.6f}" + ) + else: + message = f"Training step {iteration}/{progress['max_step']} - Loss: {average_loss:.6f}" + writer.write( + status="RUNNING", + message=message, + data=progress, + kpi=kpi, + ) + + def on_validation_start(self, model: Any, dataloader_val: Any, iteration: int = 0) -> None: + self._validation_batches = 0 + self._validation_loss_numerator = 0.0 + self._validation_loss_denominator = 0 + self._validation_local_numerators = [] + self._validation_local_denominators = [] + writer = self._get_writer() + if writer is not None: + writer.write( + status="RUNNING", + message=f"Starting validation for {self._epoch_label(iteration)}", + data={**self._progress_data(iteration), "phase": "validation_starting"}, + ) + log.info(f"Starting validation for {self._epoch_label(iteration)}") + + def on_validation_step_end( + self, + model: Any, + data_batch: dict[str, Any], + output_batch: dict[str, Any], + loss: torch.Tensor, + iteration: int = 0, + ) -> None: + local_numerator, local_denominator = self._local_token_stats(loss, data_batch, output_batch) + self._validation_local_numerators.append(local_numerator) + self._validation_local_denominators.append(local_denominator) + self._validation_batches += 1 + + if self._validation_batches % self.validation_heartbeat_interval != 0: + return + average_loss, _, _ = self._global_token_average(loss, data_batch, output_batch) + writer = self._get_writer() + max_validation_batches = getattr(self.config.trainer, "max_val_iter", None) + batch_progress = ( + f"{self._validation_batches}/{max_validation_batches}" + if max_validation_batches is not None + else str(self._validation_batches) + ) + if writer is not None: + writer.write( + status="RUNNING", + message=( + f"Validation {self._epoch_label(iteration)}, batch {batch_progress} - Loss: {average_loss:.6f}" + ), + data={ + **self._progress_data(iteration), + "phase": "validation_batch_complete", + "validation_batch": self._validation_batches, + "max_validation_batches": max_validation_batches, + }, + kpi={"val/batch_loss": average_loss}, + ) + log.info(f"Validation {self._epoch_label(iteration)}, batch {batch_progress} - Loss: {average_loss:.6f}") + + def on_validation_end(self, model: Any, iteration: int = 0) -> None: + if self._validation_local_numerators: + # Preserve the historical Python-float accumulation order exactly, + # while replacing one CUDA synchronization per scalar per batch + # with one bounded transfer at validation end. + local_numerators = ( + torch.stack(self._validation_local_numerators).detach().cpu().tolist() + ) + local_denominators = ( + torch.stack(self._validation_local_denominators).detach().cpu().tolist() + ) + self._validation_loss_numerator = sum( + float(value) for value in local_numerators + ) + self._validation_loss_denominator = sum( + int(value) for value in local_denominators + ) + print( + "TAO_FRAMEWORK_VALIDATION_STATUS_REDUCTION_ATTESTATION " + f"mode=deferred_scalar_transfer batches={self._validation_batches} " + f"rank={os.environ.get('RANK', os.environ.get('LOCAL_RANK', '0'))}", + flush=True, + ) + self._validation_local_numerators = [] + self._validation_local_denominators = [] + numerator, denominator = self._reduce_accumulator( + self._validation_loss_numerator, self._validation_loss_denominator + ) + if denominator == 0: + log.warning("TAO validation logging saw zero samples; no val/loss record was written") + return + + self.last_validation_loss = numerator / denominator + writer = self._get_writer() + if writer is not None: + writer.write( + status="RUNNING", + message=( + f"Validation complete for {self._epoch_label(iteration)} - Loss: {self.last_validation_loss:.6f}" + ), + data={ + **self._progress_data(iteration), + "phase": "validation_complete", + "validation_batches": self._validation_batches, + "validation_loss_numerator": numerator, + "validation_valid_label_count": denominator, + }, + kpi={ + "val/loss": self.last_validation_loss, + "val/avg_loss": self.last_validation_loss, + "val/loss_numerator": numerator, + "val/valid_label_count": denominator, + }, + ) + log.info(f"Validation loss ({self._epoch_label(iteration)}): {self.last_validation_loss:.6f}") + + def on_save_checkpoint_success(self, iteration: int = 0, elapsed_time: float = 0) -> None: + checkpoint_path = None + checkpoint_root = Path(self.config.job.path_local) / "checkpoints" + latest = checkpoint_root / "latest_checkpoint.txt" + if latest.is_file(): + # DCP updates this fixed-width marker in place. A callback can + # observe trailing NUL padding while the payload is being + # replaced, so decode only the completed checkpoint-name prefix. + marker = latest.read_bytes() + checkpoint_name = marker.split(b"\x00", 1)[0].decode("utf-8").strip() + if checkpoint_name: + checkpoint_path = str((checkpoint_root / checkpoint_name).resolve()) + writer = self._get_writer() + if writer is not None: + writer.write( + status="RUNNING", + message=f"Checkpoint saved successfully at step {iteration}", + data={ + **self._progress_data(iteration), + "phase": "checkpoint_complete", + "checkpoint_iteration": iteration, + "checkpoint_elapsed_seconds": elapsed_time, + "checkpoint_path": checkpoint_path, + }, + ) + + def on_train_end(self, model: Any, iteration: int = 0) -> None: + numerator, denominator = self._reduce_accumulator(self._train_loss_numerator, self._train_loss_denominator) + if denominator == 0: + raise RuntimeError("TAO metric collection observed zero valid training labels") + self.last_training_loss = numerator / denominator + writer = self._get_writer() + if writer is not None: + writer.write( + status="RUNNING", + message=f"Training complete - token-weighted loss: {self.last_training_loss:.6f}", + data={ + **self._progress_data(iteration), + "phase": "training_complete", + "train_loss_numerator": numerator, + "train_valid_label_count": denominator, + }, + kpi={ + "train/avg_loss": self.last_training_loss, + "train/loss_numerator": numerator, + "train/valid_label_count": denominator, + }, + ) + + def on_app_end(self) -> None: + writer = self._get_writer() + if writer is not None: + writer.write( + status="SUCCESS", + message=f"{self._component_name()} training completed successfully", + data=self._progress_data( + int(getattr(getattr(self, "trainer", None), "max_iterations", self.config.trainer.max_iter)) + ), + kpi={ + **({"train/avg_loss": self.last_training_loss} if self.last_training_loss is not None else {}), + **( + {"val/loss": self.last_validation_loss, "val/avg_loss": self.last_validation_loss} + if self.last_validation_loss is not None + else {} + ), + }, + ) + + def on_exception(self, error: BaseException) -> None: + writer = self._get_writer() + if writer is not None: + writer.write( + status="FAILURE", + verbosity="ERROR", + message=f"{self._component_name()} training failed: {error}", + data={"component": self._component_name(), "error_type": type(error).__name__}, + ) diff --git a/cosmos_framework/callbacks/tao_status_test.py b/cosmos_framework/callbacks/tao_status_test.py new file mode 100644 index 000000000..c0ff51672 --- /dev/null +++ b/cosmos_framework/callbacks/tao_status_test.py @@ -0,0 +1,159 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: OpenMDW-1.1 + +from __future__ import annotations + +import json +from types import SimpleNamespace + +import torch + +from cosmos_framework.callbacks.tao_status import TAOStatusCallback + + +def _callback(tmp_path) -> TAOStatusCallback: + callback = TAOStatusCallback( + enabled=True, + status_file_path=str(tmp_path / "status.json"), + experiment_name="test", + ) + callback.config = SimpleNamespace( + job=SimpleNamespace(name="job", path_local=str(tmp_path)), + trainer=SimpleNamespace(max_iter=6, max_val_iter=2, logging_iter=1), + ) + callback.trainer = SimpleNamespace(max_iterations=6, num_epochs=2, steps_per_epoch=3) + return callback + + +def _records(tmp_path) -> list[dict]: + return [json.loads(line) for line in (tmp_path / "status.json").read_text(encoding="utf-8").splitlines()] + + +def test_tao_status_callback_writes_training_validation_and_success(tmp_path) -> None: + callback = _callback(tmp_path) + callback.on_train_start(model=None, iteration=0) + callback.on_training_step_start(model=None, data={}, iteration=0) + callback.on_training_step_batch_end( + model=None, + data_batch={"input_ids": torch.zeros(2, 3)}, + output_batch={"loss_numerator": torch.tensor(6.0), "loss_denominator": torch.tensor(12)}, + loss=torch.tensor(0.5), + iteration=3, + ) + callback.on_training_step_end( + model=None, + data_batch={"input_ids": torch.zeros(2, 3)}, + output_batch={"loss_numerator": torch.tensor(6.0), "loss_denominator": torch.tensor(12)}, + loss=torch.tensor(0.5), + iteration=3, + ) + callback.on_validation_start(model=None, dataloader_val=None, iteration=3) + callback.on_validation_step_end( + model=None, + data_batch={"input_ids": torch.zeros(2, 3)}, + output_batch={"loss_numerator": torch.tensor(2.0), "loss_denominator": torch.tensor(8)}, + loss=torch.tensor(0.25), + iteration=3, + ) + callback.on_validation_end(model=None, iteration=3) + callback.on_train_end(model=None, iteration=6) + callback.on_app_end() + + records = _records(tmp_path) + assert [record["status"] for record in records] == [ + "STARTED", + "RUNNING", + "RUNNING", + "RUNNING", + "RUNNING", + "RUNNING", + "SUCCESS", + ] + assert records[1]["kpi"]["train/step_loss"] == 0.5 + assert records[1]["epoch"] == 1 + assert records[1]["max_epoch"] == 2 + assert records[1]["step_in_epoch"] == 3 + assert records[1]["steps_per_epoch"] == 3 + assert records[1]["max_step"] == 6 + assert records[2]["phase"] == "validation_starting" + assert records[3]["max_validation_batches"] == 2 + assert "epoch 1/2" in records[3]["message"] + assert records[4]["kpi"]["val/avg_loss"] == 0.25 + assert records[4]["kpi"]["val/loss_numerator"] == 2.0 + assert records[4]["kpi"]["val/valid_label_count"] == 8 + assert "epoch 1/2" in records[4]["message"] + assert records[5]["phase"] == "training_complete" + assert records[5]["kpi"]["train/avg_loss"] == 0.5 + assert records[5]["train_loss_numerator"] == 6.0 + assert records[5]["train_valid_label_count"] == 12 + assert records[5]["kpi"]["train/valid_label_count"] == 12 + assert records[-1]["kpi"]["val/loss"] == 0.25 + assert records[-1]["epoch"] == 2 + assert records[-1]["completed_epochs"] == 2 + + +def test_tao_status_callback_reports_checkpoint_event(tmp_path) -> None: + callback = _callback(tmp_path) + checkpoint = tmp_path / "checkpoints" / "epoch_1" + checkpoint.mkdir(parents=True) + (tmp_path / "checkpoints" / "latest_checkpoint.txt").write_text("epoch_1\n") + callback.on_save_checkpoint_success(iteration=3, elapsed_time=1.25) + record = _records(tmp_path)[-1] + assert record["phase"] == "checkpoint_complete" + assert record["checkpoint_iteration"] == 3 + assert record["checkpoint_elapsed_seconds"] == 1.25 + assert record["checkpoint_path"] == str(checkpoint.resolve()) + + +def test_validation_stats_defer_scalar_transfer_until_end(tmp_path) -> None: + callback = _callback(tmp_path) + callback.validation_heartbeat_interval = 50 + callback.on_validation_start(model=None, dataloader_val=None, iteration=3) + + numerators = [torch.tensor(1.25), torch.tensor(2.5)] + denominators = [torch.tensor(4), torch.tensor(6)] + for numerator, denominator in zip(numerators, denominators): + callback.on_validation_step_end( + model=None, + data_batch={"input_ids": torch.zeros(1, 3)}, + output_batch={ + "loss_numerator": numerator, + "loss_denominator": denominator, + }, + loss=numerator / denominator, + iteration=3, + ) + + assert callback._validation_loss_numerator == 0.0 + assert callback._validation_loss_denominator == 0 + assert len(callback._validation_local_numerators) == 2 + callback.on_validation_end(model=None, iteration=3) + + assert callback._validation_loss_numerator == 3.75 + assert callback._validation_loss_denominator == 10 + assert callback.last_validation_loss == 0.375 + assert callback._validation_local_numerators == [] + assert callback._validation_local_denominators == [] + + +def test_tao_status_callback_ignores_dcp_marker_nul_padding(tmp_path) -> None: + callback = _callback(tmp_path) + checkpoint = tmp_path / "checkpoints" / "epoch_1" + checkpoint.mkdir(parents=True) + (tmp_path / "checkpoints" / "latest_checkpoint.txt").write_bytes(b"epoch_1\x00\x00\x00") + + callback.on_save_checkpoint_success(iteration=3, elapsed_time=1.25) + + record = _records(tmp_path)[-1] + assert record["phase"] == "checkpoint_complete" + assert record["checkpoint_path"] == str(checkpoint.resolve()) + + +def test_tao_status_callback_writes_failure(tmp_path) -> None: + callback = _callback(tmp_path) + callback.on_train_start(model=None, iteration=0) + callback.on_exception(RuntimeError("boom")) + + records = _records(tmp_path) + assert records[-1]["status"] == "FAILURE" + assert records[-1]["error_type"] == "RuntimeError" diff --git a/cosmos_framework/checkpoint/base.py b/cosmos_framework/checkpoint/base.py index 59539207f..1d607c8df 100644 --- a/cosmos_framework/checkpoint/base.py +++ b/cosmos_framework/checkpoint/base.py @@ -8,11 +8,11 @@ import torch -from cosmos_framework.utils.config import CheckpointConfig, JobConfig, ObjectStoreConfig -from cosmos_framework.utils.flags import INTERNAL from cosmos_framework.model._base import ImaginaireModel from cosmos_framework.utils import callback +from cosmos_framework.utils.config import CheckpointConfig, JobConfig, ObjectStoreConfig from cosmos_framework.utils.easy_io import easy_io +from cosmos_framework.utils.flags import INTERNAL @dataclass(frozen=True, slots=True) @@ -123,6 +123,7 @@ def save( scheduler: torch.optim.lr_scheduler.LRScheduler, grad_scaler: torch.amp.GradScaler, iteration: int, + epoch: int | None = None, ) -> None: pass diff --git a/cosmos_framework/checkpoint/dcp.py b/cosmos_framework/checkpoint/dcp.py index 30cbea646..0be655f11 100644 --- a/cosmos_framework/checkpoint/dcp.py +++ b/cosmos_framework/checkpoint/dcp.py @@ -78,9 +78,9 @@ ) from cosmos_framework.checkpoint.base import AbstractCheckpointer, CheckpointLoadSource from cosmos_framework.checkpoint.s3_filesystem import S3StorageReader, S3StorageWriter -from cosmos_framework.utils.config import CheckpointConfig, JobConfig from cosmos_framework.model._base import ImaginaireModel from cosmos_framework.utils import callback, distributed, log, misc +from cosmos_framework.utils.config import CheckpointConfig, JobConfig from cosmos_framework.utils.easy_io import easy_io from cosmos_framework.utils.generator.rand_state import get_rand_state_dict, set_rand_state_dict @@ -790,7 +790,7 @@ def keys_to_resume_during_load(self) -> tuple[set[str], CheckpointLoadSource | N # If the path doesn't end with specific checkpoint, read the latest # checkpoint file to determine the most recent checkpoint iteration. - if not re.search(r"/checkpoints/iter_\d{9}/?$", checkpoint_path): + if not re.search(r"/checkpoints/(?:iter_\d{9}|epoch_\d+)/?$", checkpoint_path): old_ckpt_path = checkpoint_path latest_ckpt_path = os.path.join(checkpoint_path, "checkpoints/latest_checkpoint.txt") @@ -1207,6 +1207,7 @@ def save( scheduler: torch.optim.lr_scheduler.LRScheduler, grad_scaler: torch.amp.GradScaler, iteration: int, + epoch: int | None = None, ) -> None: """Save network weights, optimizer parameters, scheduler parameters to a checkpoint. @@ -1223,7 +1224,7 @@ def save( if self.callbacks is not None: self.callbacks.on_save_checkpoint_start(model, iteration) - checkpoint_file = f"iter_{iteration:09}" + checkpoint_file = f"epoch_{epoch}" if epoch is not None else f"iter_{iteration:09}" # Use rank-specific key for RNG state to ensure each rank saves its own state rng_key = f"rng_state_{dist.get_rank()}" @@ -1246,7 +1247,7 @@ def save( self.callbacks.on_save_checkpoint(model, state_dict=to_save_dict) for k in to_save_dict.keys(): - output_dirname = os.path.join(self.save_dirname, f"iter_{iteration:09}/{k}") + output_dirname = os.path.join(self.save_dirname, checkpoint_file, k) to_save_dict[k] = (to_save_dict[k], output_dirname) if self.async_mode == AsyncMode.ASYNC_WITH_PINNED_MEM: diff --git a/cosmos_framework/checkpoint/dcp_distill.py b/cosmos_framework/checkpoint/dcp_distill.py index a1b5279c3..a6921e3a3 100644 --- a/cosmos_framework/checkpoint/dcp_distill.py +++ b/cosmos_framework/checkpoint/dcp_distill.py @@ -26,9 +26,6 @@ from torch.distributed.checkpoint.stateful import Stateful from torch.nn.modules.module import _IncompatibleKeys -from cosmos_framework.model._base import ImaginaireModel -from cosmos_framework.utils import log, misc -from cosmos_framework.utils.easy_io import easy_io from cosmos_framework.checkpoint.dcp import ( AsyncMode, CustomLoadPlanner, @@ -38,8 +35,11 @@ DistributedCheckpointer as _DistributedCheckpointer, ) from cosmos_framework.checkpoint.dcp import ModelWrapper as VFMModelWrapper -from cosmos_framework.utils.generator.rand_state import get_rand_state_dict, set_rand_state_dict +from cosmos_framework.model._base import ImaginaireModel from cosmos_framework.model.generator.distillation.optimizer import OptimizerContainerLike, is_optimizer_container +from cosmos_framework.utils import log, misc +from cosmos_framework.utils.easy_io import easy_io +from cosmos_framework.utils.generator.rand_state import get_rand_state_dict, set_rand_state_dict __all__: tuple[str, ...] = ( "DistributedCheckpointer", @@ -324,6 +324,7 @@ def save( scheduler: Any = None, grad_scaler: torch.amp.GradScaler | None = None, iteration: int = 0, + epoch: int | None = None, ) -> None: if self.async_mode == AsyncMode.ASYNC_WITH_PINNED_MEM: self._wait_for_previous_async_checkpoint() @@ -332,7 +333,7 @@ def save( self.callbacks.on_save_checkpoint_start(model, iteration) model_dict = model.model_dict() - checkpoint_file = f"iter_{iteration:09}" + checkpoint_file = f"epoch_{epoch}" if epoch is not None else f"iter_{iteration:09}" rng_key = f"rng_state_{dist.get_rank()}" to_save_dict: dict[str, Any] = { @@ -360,7 +361,7 @@ def save( to_save_dict["dataloader"] = dataloader_wrapper.state_dict() for key in list(to_save_dict.keys()): - output_dirname = os.path.join(self.save_dirname, f"iter_{iteration:09}/{key}") + output_dirname = os.path.join(self.save_dirname, checkpoint_file, key) to_save_dict[key] = (to_save_dict[key], output_dirname) if self.callbacks is not None: diff --git a/cosmos_framework/checkpoint/dummy.py b/cosmos_framework/checkpoint/dummy.py index 3cfa1babe..443241d96 100644 --- a/cosmos_framework/checkpoint/dummy.py +++ b/cosmos_framework/checkpoint/dummy.py @@ -22,6 +22,7 @@ def save( scheduler: torch.optim.lr_scheduler.LRScheduler, grad_scaler: torch.amp.GradScaler, iteration: int, + epoch: int | None = None, ) -> None: pass diff --git a/cosmos_framework/configs/base/reasoner/defaults/callbacks.py b/cosmos_framework/configs/base/reasoner/defaults/callbacks.py index 89e7006d5..97068eefb 100644 --- a/cosmos_framework/configs/base/reasoner/defaults/callbacks.py +++ b/cosmos_framework/configs/base/reasoner/defaults/callbacks.py @@ -7,23 +7,23 @@ from hydra.core.config_store import ConfigStore -from cosmos_framework.callbacks.manual_gc import ManualGarbageCollection -from cosmos_framework.utils.lazy_config import PLACEHOLDER -from cosmos_framework.utils.lazy_config import LazyCall as L -from cosmos_framework.utils.callback import LowPrecisionCallback, WandBCallback from cosmos_framework.callbacks.dataloader_state import DataLoaderStateCallback - from cosmos_framework.callbacks.grad_clip import GradClip from cosmos_framework.callbacks.hf_export import HFExportCallback from cosmos_framework.callbacks.iter_speed import IterSpeed from cosmos_framework.callbacks.learning_rate_logger import LearningRateLogger from cosmos_framework.callbacks.log_tensor_shape import LogTensorShapeCallback +from cosmos_framework.callbacks.manual_gc import ManualGarbageCollection from cosmos_framework.callbacks.param_count import ParamCount from cosmos_framework.callbacks.sampled_media_recorder import SampledMediaRecorder +from cosmos_framework.callbacks.tao_status import TAOStatusCallback from cosmos_framework.callbacks.tokens_per_sec import VLMTokensPerSec from cosmos_framework.callbacks.wandb_log import WandbCallback as WandBCallbackMultiplier from cosmos_framework.callbacks.wandb_vis import VisualizationLoggingCallback from cosmos_framework.configs.base.defaults.job_monitor import JOB_MONITOR_CALLBACKS +from cosmos_framework.utils.callback import LowPrecisionCallback, WandBCallback +from cosmos_framework.utils.lazy_config import PLACEHOLDER +from cosmos_framework.utils.lazy_config import LazyCall as L # from cosmos_framework.utils.callback import NVTXCallback @@ -53,6 +53,13 @@ def register_callbacks(): config=PLACEHOLDER, trainer=PLACEHOLDER, ), # reads model.precision; no extra kwarg needed + tao=L(TAOStatusCallback)( + enabled=False, + status_file_path=None, + experiment_name="", + logging_interval=1, + validation_heartbeat_interval=1, + ), sampled_media=L(SampledMediaRecorder)( enabled=False, output_uri=( diff --git a/cosmos_framework/configs/toml_config/sft_config.py b/cosmos_framework/configs/toml_config/sft_config.py index 04d0efbc5..ee0372b6f 100644 --- a/cosmos_framework/configs/toml_config/sft_config.py +++ b/cosmos_framework/configs/toml_config/sft_config.py @@ -11,7 +11,7 @@ from __future__ import annotations from pathlib import Path -from typing import Any, Optional +from typing import Any, Literal, Optional import tomllib from pydantic import BaseModel, ConfigDict, Field @@ -357,8 +357,7 @@ class ModelConfig(BaseModel): lora_rank: int = Field( default=16, description=( - "LoRA rank `r`. Adapter shape is (rank × hidden_dim) per target " - "module. Standard values are 4, 8, 16, 32." + "LoRA rank `r`. Adapter shape is (rank × hidden_dim) per target module. Standard values are 4, 8, 16, 32." ), ) lora_alpha: int = Field( @@ -375,13 +374,20 @@ class ModelConfig(BaseModel): "adapter. Defaults target the four MoE-gen projection matrices." ), ) + lora_dropout: float = Field(default=0.0, ge=0.0, lt=1.0) + lora_bias: Literal["none", "all", "lora_only"] = "none" + lora_use_rslora: bool = False + lora_modules_to_save: str = Field( + default="", + description="Comma-separated module-name suffixes trained and saved with LoRA adapters.", + ) + lora_precision: Literal["float32", "float16", "bfloat16"] | None = None + qwen3_vl_patch_embed: Literal["auto", "linear", "conv3d"] = "auto" ema: EMAConfig = Field(default_factory=EMAConfig) parallelism: ParallelismConfig = Field(default_factory=ParallelismConfig) compile: CompileConfig = Field(default_factory=CompileConfig) - activation_checkpointing: ActivationCheckpointingConfig = Field( - default_factory=ActivationCheckpointingConfig - ) + activation_checkpointing: ActivationCheckpointingConfig = Field(default_factory=ActivationCheckpointingConfig) tokenizer: ModelTokenizerConfig = Field(default_factory=ModelTokenizerConfig) backbone: BackboneConfig = Field(default_factory=BackboneConfig) @@ -473,15 +479,12 @@ class SchedulerConfig(BaseModel): ) f_start: list[float] = Field( default_factory=lambda: [1.0e-6], - description=( - "Initial LR multiplier at step 0, before warmup ramps up." - ), + description=("Initial LR multiplier at step 0, before warmup ramps up."), ) verbosity_interval: int = Field( default=0, description=( - "How often the scheduler logs the current LR (in optimizer " - "steps). 0 = silent. VFM only — skipped on VLM." + "How often the scheduler logs the current LR (in optimizer steps). 0 = silent. VFM only — skipped on VLM." ), ) warm_up_steps: list[int] = Field( @@ -533,8 +536,7 @@ class GradClipCallback(BaseModel): clip_norm: float = Field( default=1.0, description=( - "Maximum global L2 norm of the gradient. Steps with a larger " - "norm are rescaled so ||grad|| ≤ clip_norm." + "Maximum global L2 norm of the gradient. Steps with a larger norm are rescaled so ||grad|| ≤ clip_norm." ), ) force_finite: bool = Field( @@ -547,8 +549,37 @@ class GradClipCallback(BaseModel): ) +class TAOStatusCallbackConfig(BaseModel): + """TAO-compatible lifecycle and training/validation metric logging.""" + + model_config = _PYDANTIC_MODEL_CONFIG + + enabled: bool = Field(default=False, description="Enable TAO status.json logging.") + status_file_path: Optional[str] = Field( + default=None, + description=( + "Explicit status.json path. When unset, TAO_JOB_ID/TAO_RESULTS_ROOT, " + "legacy TAO API variables, then job.path_local are used." + ), + ) + experiment_name: str = Field( + default="", + description="TAO component name. Empty uses job.name.", + ) + logging_interval: int = Field( + default=1, + ge=1, + description="Multiplier applied to trainer.logging_iter for TAO training records.", + ) + validation_heartbeat_interval: int = Field( + default=1, + ge=1, + description="Write validation progress every N validation batches.", + ) + + class TrainerCallbacksConfig(BaseModel): - """Only the two callbacks the schema currently surfaces. The full + """Callbacks surfaced by the structured TOML schema. The full callbacks dict (norm_monitor, mfu, heart_beat, …) stays in the experiment Python. """ @@ -557,6 +588,7 @@ class TrainerCallbacksConfig(BaseModel): compile_tokenizer: CompileTokenizerCallback = Field(default_factory=CompileTokenizerCallback) grad_clip: GradClipCallback = Field(default_factory=GradClipCallback) + tao: TAOStatusCallbackConfig = Field(default_factory=TAOStatusCallbackConfig) class TrainerConfig(BaseModel): @@ -567,8 +599,7 @@ class TrainerConfig(BaseModel): distributed_parallelism: str = Field( default="fsdp", description=( - "Distributed strategy. 'fsdp' (the only supported value today) " - "routes through cosmos's FSDP wrapper." + "Distributed strategy. 'fsdp' (the only supported value today) routes through cosmos's FSDP wrapper." ), ) grad_accum_iter: int = Field( @@ -587,6 +618,39 @@ class TrainerConfig(BaseModel): default=500, description="Total number of optimizer steps the run will execute.", ) + num_epochs: Optional[int] = Field( + default=None, + ge=1, + description="Number of complete training epochs. Requires steps_per_epoch and takes priority over max_iter.", + ) + steps_per_epoch: Optional[int] = Field( + default=None, + ge=1, + description="Optimizer updates in one training epoch.", + ) + max_val_iter: Optional[int] = Field( + default=None, + ge=1, + description="Maximum validation batches per validation pass. None consumes a finite validation loader.", + ) + run_validation: bool = Field( + default=False, + description="Enable validation during training.", + ) + validation_iter: int = Field( + default=100, + ge=1, + description="Run validation every N optimizer steps.", + ) + validation_freq_in_epoch: int = Field( + default=0, + ge=0, + description="Validate every N completed epochs; 0 uses validation_iter.", + ) + run_validation_on_start: bool = Field( + default=False, + description="Run one validation pass before the first training step.", + ) callbacks: TrainerCallbacksConfig = Field(default_factory=TrainerCallbacksConfig) @@ -618,6 +682,18 @@ class CheckpointConfig(BaseModel): default=100, description="Save a new checkpoint every N optimizer steps.", ) + save_freq_in_epoch: int = Field( + default=0, + ge=0, + description="Save every N completed epochs; 0 uses save_iter.", + ) + dcp_async_mode_enabled: bool = Field( + default=True, + description=( + "Stage distributed checkpoints to a background process. Set false " + "for synchronous checkpoint completion before training continues." + ), + ) # ---------------------------------------------------------------- dataloader_train @@ -658,10 +734,7 @@ class DataloaderTrainConfig(BaseModel): ) seed: int = Field( default=42, - description=( - "Dataloader RNG seed. Skipped on VLM (CosmosDataLoader has " - "no seed ctor kwarg there)." - ), + description=("Dataloader RNG seed. Skipped on VLM (CosmosDataLoader has no seed ctor kwarg there)."), ) @@ -746,8 +819,7 @@ def load_experiment_from_toml( base_config_path = TASK_TO_BASE_CONFIG[task] except KeyError as e: raise ValueError( - f"{toml_path}: [job].task={task!r} is not supported. " - f"Valid values: {sorted(TASK_TO_BASE_CONFIG)}" + f"{toml_path}: [job].task={task!r} is not supported. Valid values: {sorted(TASK_TO_BASE_CONFIG)}" ) from e overrides = build_hydra_overrides(raw) @@ -759,10 +831,7 @@ def load_experiment_from_toml( if not o or o == "--": continue if "=" not in o: - raise ValueError( - f"extra override {o!r} must be Hydra dotted-path syntax " - f"(e.g. 'optimizer.lr=1e-5')." - ) + raise ValueError(f"extra override {o!r} must be Hydra dotted-path syntax (e.g. 'optimizer.lr=1e-5').") overrides.append(o) # Import lazily so this module stays cheap to import in non-training contexts. diff --git a/cosmos_framework/configs/toml_config/sft_config_test.py b/cosmos_framework/configs/toml_config/sft_config_test.py index 8ff8f3f04..2bc18865e 100644 --- a/cosmos_framework/configs/toml_config/sft_config_test.py +++ b/cosmos_framework/configs/toml_config/sft_config_test.py @@ -76,6 +76,77 @@ def test_custom_does_not_loosen_sibling_validation(self) -> None: } ) + def test_native_epoch_schedule_fields_validate(self) -> None: + cfg = SFTExperimentConfig.model_validate( + { + "job": {"task": "vlm", "experiment": "wts_vlm"}, + "trainer": { + "num_epochs": 2, + "steps_per_epoch": 108, + "validation_freq_in_epoch": 1, + }, + "checkpoint": { + "save_freq_in_epoch": 2, + "dcp_async_mode_enabled": False, + }, + } + ) + + assert cfg.trainer.num_epochs == 2 + assert cfg.trainer.steps_per_epoch == 108 + assert cfg.trainer.validation_freq_in_epoch == 1 + assert cfg.checkpoint.save_freq_in_epoch == 2 + assert cfg.checkpoint.dcp_async_mode_enabled is False + + overrides = build_hydra_overrides( + { + "job": {"task": "vlm", "experiment": "wts_vlm"}, + "checkpoint": {"dcp_async_mode_enabled": False}, + } + ) + assert "checkpoint.dcp_async_mode_enabled=false" in overrides + + def test_vlm_peft_fields_are_explicit_and_validated(self) -> None: + cfg = SFTExperimentConfig.model_validate( + { + "job": {"task": "vlm", "experiment": "wts_vlm"}, + "model": { + "lora_enabled": True, + "lora_rank": 8, + "lora_alpha": 16, + "lora_dropout": 0.05, + "lora_target_modules": "q_proj,v_proj", + "lora_bias": "none", + "lora_use_rslora": True, + "lora_modules_to_save": "lm_head", + "lora_precision": "bfloat16", + "qwen3_vl_patch_embed": "linear", + }, + } + ) + assert cfg.model.lora_enabled is True + assert cfg.model.lora_rank == 8 + assert cfg.model.lora_use_rslora is True + + def test_vlm_peft_fields_reach_policy_overrides(self) -> None: + overrides = build_hydra_overrides( + { + "job": {"task": "vlm", "experiment": "wts_vlm"}, + "model": { + "lora_enabled": True, + "lora_rank": 8, + "lora_dropout": 0.05, + "lora_bias": "lora_only", + "qwen3_vl_patch_embed": "auto", + }, + } + ) + assert "model.config.policy.lora_enabled=true" in overrides + assert "model.config.policy.lora_rank=8" in overrides + assert "model.config.policy.lora_dropout=0.05" in overrides + assert "model.config.policy.lora_bias=lora_only" in overrides + assert "model.config.policy.qwen3_vl_patch_embed=auto" in overrides + # --------------------------------------------------------------------------- # # 2. build_hydra_overrides must NOT emit [custom] as per-leaf overrides # diff --git a/cosmos_framework/configs/toml_config/toml_config_helper.py b/cosmos_framework/configs/toml_config/toml_config_helper.py index 4d1535c55..27f02ac0a 100644 --- a/cosmos_framework/configs/toml_config/toml_config_helper.py +++ b/cosmos_framework/configs/toml_config/toml_config_helper.py @@ -52,6 +52,12 @@ ("job", "upload_reproducible_setup"): ("upload_reproducible_setup",), ("model", "attn_implementation"): None, ("model", "backbone"): None, # VLM-only — VFM has no model.config.backbone + ("model", "lora_dropout"): None, + ("model", "lora_bias"): None, + ("model", "lora_use_rslora"): None, + ("model", "lora_modules_to_save"): None, + ("model", "lora_precision"): None, + ("model", "qwen3_vl_patch_embed"): None, # Per-caption token cap lives on the nested SFT dataset, not a top-level # dataloader scalar — route it to the get_sft_dataset node. ("dataloader_train", "max_caption_tokens"): ( @@ -72,10 +78,16 @@ # No VLM analog — skip these leaves ("model", "max_num_tokens_after_packing"): None, ("model", "joint_attn_implementation"): None, - ("model", "lora_enabled"): None, - ("model", "lora_rank"): None, - ("model", "lora_alpha"): None, - ("model", "lora_target_modules"): None, + ("model", "lora_enabled"): ("model", "config", "policy", "lora_enabled"), + ("model", "lora_rank"): ("model", "config", "policy", "lora_rank"), + ("model", "lora_alpha"): ("model", "config", "policy", "lora_alpha"), + ("model", "lora_dropout"): ("model", "config", "policy", "lora_dropout"), + ("model", "lora_target_modules"): ("model", "config", "policy", "lora_target_modules"), + ("model", "lora_bias"): ("model", "config", "policy", "lora_bias"), + ("model", "lora_use_rslora"): ("model", "config", "policy", "lora_use_rslora"), + ("model", "lora_modules_to_save"): ("model", "config", "policy", "lora_modules_to_save"), + ("model", "lora_precision"): ("model", "config", "policy", "lora_precision"), + ("model", "qwen3_vl_patch_embed"): ("model", "config", "policy", "qwen3_vl_patch_embed"), ("model", "tokenizer"): None, # blocks model.tokenizer.* ("dataloader_train", "seed"): None, ("optimizer", "eps"): None, # VLM_OPTIMIZER_KWARGS has no eps field @@ -208,5 +220,3 @@ def _hydra_format(v: Any, in_list: bool = False) -> str: return f"'{v}'" return v return str(v) - - diff --git a/cosmos_framework/scripts/train.py b/cosmos_framework/scripts/train.py index 7e1375033..fd4bef43e 100644 --- a/cosmos_framework/scripts/train.py +++ b/cosmos_framework/scripts/train.py @@ -31,15 +31,14 @@ import torch from loguru import logger as logging -from cosmos_framework.utils.config import Config -from cosmos_framework.utils.lazy_config import LazyConfig, instantiate -from cosmos_framework.utils.serialization import to_yaml +from cosmos_framework.configs.toml_config.sft_config import load_experiment_from_toml from cosmos_framework.utils import distributed +from cosmos_framework.utils.config import Config from cosmos_framework.utils.context_managers import data_loader_init, distributed_init, model_init from cosmos_framework.utils.launch import log_reproducible_setup +from cosmos_framework.utils.lazy_config import LazyConfig, instantiate +from cosmos_framework.utils.serialization import to_yaml from cosmos_framework.utils.training_telemetry import telemetry -from cosmos_framework.configs.toml_config.sft_config import load_experiment_from_toml - # --------------------------------------------------------------------------- # --deterministic: mirrors launch_vfm.sh determinism settings. @@ -217,15 +216,20 @@ def launch(config: Config, args: argparse.Namespace) -> None: dataloader_train = instantiate(config.dataloader_train) dataloader_val = instantiate(config.dataloader_val) - # Start training - trainer.train( - model, - dataloader_train, - dataloader_val, - ) + # Start training. Give callbacks a final failure hook so external + # orchestrators (including TAO) receive a terminal status record. + try: + trainer.train( + model, + dataloader_train, + dataloader_val, + ) + except BaseException as error: + trainer.callbacks.on_exception(error) + raise -if __name__ == "__main__": +def main() -> int: parser = argparse.ArgumentParser(description="SFT training (structured TOML)") parser.add_argument( "--sft-toml", @@ -279,49 +283,41 @@ def launch(config: Config, args: argparse.Namespace) -> None: if args.deterministic: _setup_deterministic_env_and_backends() - config = load_experiment_from_toml(args.sft_toml, extra_overrides=args.opts) - - # log_reproducible_setup reads args.config for telemetry; this entrypoint - # only takes --sft-toml, so alias it so the launch info records the TOML. - args.config = args.sft_toml - - if args.dryrun: - logging.info("Config:\n" + config.pretty_print(use_color=True)) - os.makedirs(config.job.path_local, exist_ok=True) - try: - to_yaml(config, f"{config.job.path_local}/config.yaml") - except Exception: - logging.error("to_yaml failed, falling back to LazyConfig.save_yaml:") - logging.error(f"Traceback: {traceback.format_exc()}") - LazyConfig.save_yaml(config, f"{config.job.path_local}/config.yaml") - print(f"{config.job.path_local}/config.yaml") - else: - launch(config, args) - # Training finished. Exit without running interpreter finalization. - # - # A native thread outlives training: at ``atexit`` time - # ``threading.enumerate()`` reports only MainThread (plus wandb's daemon - # thread), yet finalization then faults with - # Fatal Python error: PyGILState_Release: thread state ... must be - # current when releasing - # on some hosts, and blocks forever on others -- in both cases *after* - # "Done with training." has been logged and every result produced. The - # streaming HuggingFace dataloader is what brings the thread in (a - # map-style dataset shuts down cleanly), but nothing reachable from - # Python owns it, so there is no handle to close. Not finalizing is what - # makes shutdown deterministic. - # - # ``os._exit`` skips atexit hooks and buffered-file flushing, so flush - # explicitly first. Only reached on success: an exception from - # ``launch`` propagates normally and keeps the usual traceback and - # non-zero exit. - # - # Opt-in, because skipping atexit is not free: anything registered there - # stops running, most visibly wandb's final flush/upload. Off by default - # so ordinary training keeps its normal shutdown; the launch regression - # sets it because that job is otherwise killed by the CI timeout. - if os.environ.get("COSMOS_EXIT_WITHOUT_FINALIZE", "").lower() in ("1", "true"): - logging.info("COSMOS_EXIT_WITHOUT_FINALIZE set: exiting without interpreter finalization.") - sys.stdout.flush() - sys.stderr.flush() - os._exit(0) + try: + config = load_experiment_from_toml(args.sft_toml, extra_overrides=args.opts) + + # log_reproducible_setup reads args.config for telemetry; this entrypoint + # only takes --sft-toml, so alias it so the launch info records the TOML. + args.config = args.sft_toml + + if args.dryrun: + logging.info("Config:\n" + config.pretty_print(use_color=True)) + os.makedirs(config.job.path_local, exist_ok=True) + try: + to_yaml(config, f"{config.job.path_local}/config.yaml") + except Exception: + logging.error("to_yaml failed, falling back to LazyConfig.save_yaml:") + logging.error(f"Traceback: {traceback.format_exc()}") + LazyConfig.save_yaml(config, f"{config.job.path_local}/config.yaml") + print(f"{config.job.path_local}/config.yaml") + else: + launch(config, args) + # Some streaming dataloaders leave an unreachable native thread + # alive after successful training. This opt-in path preserves the + # established workaround while keeping normal atexit behavior by + # default. Failures still propagate through the exception handler. + if os.environ.get("COSMOS_EXIT_WITHOUT_FINALIZE", "").lower() in ("1", "true"): + logging.info("COSMOS_EXIT_WITHOUT_FINALIZE set: exiting without interpreter finalization.") + sys.stdout.flush() + sys.stderr.flush() + os._exit(0) + except BaseException as error: + from cosmos_framework.callbacks.tao_status import write_early_failure + + write_early_failure(error) + raise + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/cosmos_framework/trainer/__init__.py b/cosmos_framework/trainer/__init__.py index 94aea9449..32cde511f 100644 --- a/cosmos_framework/trainer/__init__.py +++ b/cosmos_framework/trainer/__init__.py @@ -13,9 +13,13 @@ import torch.distributed as dist import torch.utils.data -from cosmos_framework.utils.flags import INTERNAL from cosmos_framework.utils.context_managers import distributed_init -from cosmos_framework.utils.profiling import maybe_enable_memory_snapshot, maybe_enable_nsys_profiling, maybe_enable_profiling +from cosmos_framework.utils.flags import INTERNAL +from cosmos_framework.utils.profiling import ( + maybe_enable_memory_snapshot, + maybe_enable_nsys_profiling, + maybe_enable_profiling, +) try: from megatron.core import parallel_state @@ -25,14 +29,13 @@ USE_MEGATRON = False -from cosmos_framework.utils.lazy_config import LazyConfig, instantiate from cosmos_framework.model._base import ImaginaireModel from cosmos_framework.utils import callback, distributed, ema, log, misc from cosmos_framework.utils.checkpointer import Checkpointer +from cosmos_framework.utils.lazy_config import LazyConfig, instantiate from cosmos_framework.utils.misc import StragglerDetectorV2 - @dataclass class ContextParallelDataWindow: """Caches one dataloader batch across a ``cp_size``-step CP data window. @@ -96,6 +99,21 @@ def __init__(self, config): """ super().__init__() self.config = config + steps_per_epoch = getattr(config.trainer, "steps_per_epoch", None) + num_epochs = getattr(config.trainer, "num_epochs", None) + self.steps_per_epoch = int(steps_per_epoch) if steps_per_epoch else None + self.num_epochs = int(num_epochs) if num_epochs else None + if (self.steps_per_epoch is None) != (self.num_epochs is None): + raise ValueError("trainer.steps_per_epoch and trainer.num_epochs must be configured together") + self.max_iterations = ( + self.steps_per_epoch * self.num_epochs + if self.steps_per_epoch is not None and self.num_epochs is not None + else int(config.trainer.max_iter) + ) + if int(getattr(config.checkpoint, "save_freq_in_epoch", 0)) > 0 and self.steps_per_epoch is None: + raise ValueError("checkpoint.save_freq_in_epoch requires trainer.num_epochs and trainer.steps_per_epoch") + if int(getattr(config.trainer, "validation_freq_in_epoch", 0)) > 0 and self.steps_per_epoch is None: + raise ValueError("trainer.validation_freq_in_epoch requires trainer.num_epochs and trainer.steps_per_epoch") self._validation_iterator: Iterator[Any] | None = None # Set up the distributed computing environment. with distributed_init(): @@ -358,6 +376,10 @@ def train( break finally: self.callbacks.on_after_dataloading(iteration) + # If max_iter is reached, exit the training loop. + if iteration >= self.max_iterations: + _end_training = True + break # Move all tensors in the data batch to GPU device. data_batch = misc.to(data_batch, device="cuda") # Keep the CUDA copy for later slots in the CP data window. @@ -389,14 +411,42 @@ def train( # Do the following when an actual optimizer (update) step has been made. iteration += 1 # Save checkpoint. - if iteration % self.config.checkpoint.save_iter == 0: - self.checkpointer.save(model, optimizer, scheduler, grad_scaler, iteration=iteration) + completed_epoch = ( + iteration // self.steps_per_epoch + if self.steps_per_epoch and iteration % self.steps_per_epoch == 0 + else None + ) + save_freq_in_epoch = int(getattr(self.config.checkpoint, "save_freq_in_epoch", 0)) + epoch_save_due = bool( + completed_epoch is not None + and save_freq_in_epoch > 0 + and completed_epoch % save_freq_in_epoch == 0 + ) + iter_save_due = save_freq_in_epoch == 0 and iteration % self.config.checkpoint.save_iter == 0 + if epoch_save_due or iter_save_due: + self.checkpointer.save( + model, + optimizer, + scheduler, + grad_scaler, + iteration=iteration, + epoch=completed_epoch if epoch_save_due else None, + ) self.callbacks.on_training_step_end(model, data_batch, output_batch, loss, iteration=iteration) # Callback consumers have finished; do not retain GPU outputs through # validation or the next training step. Callback-owned references remain valid. del output_batch, loss # Validation. - if self.config.trainer.run_validation and iteration % self.config.trainer.validation_iter == 0: + validation_freq_in_epoch = int(getattr(self.config.trainer, "validation_freq_in_epoch", 0)) + epoch_validation_due = bool( + completed_epoch is not None + and validation_freq_in_epoch > 0 + and completed_epoch % validation_freq_in_epoch == 0 + ) + iter_validation_due = ( + validation_freq_in_epoch == 0 and iteration % self.config.trainer.validation_iter == 0 + ) + if self.config.trainer.run_validation and (epoch_validation_due or iter_validation_due): self.validate(model, dataloader_val, iteration=iteration) # This iteration is successful; reset the timeout signal. signal.alarm(self.config.trainer.timeout_period) @@ -413,8 +463,24 @@ def train( log.success("Done with training.") if sm_carveout: torch._C._set_sm_carveout_experimental(None) - if iteration % self.config.checkpoint.save_iter != 0: - self.checkpointer.save(model, optimizer, scheduler, grad_scaler, iteration=iteration) + final_epoch = ( + iteration // self.steps_per_epoch + if self.steps_per_epoch and iteration % self.steps_per_epoch == 0 + else None + ) + save_freq_in_epoch = int(getattr(self.config.checkpoint, "save_freq_in_epoch", 0)) + final_already_saved = ( + final_epoch is not None and save_freq_in_epoch > 0 and final_epoch % save_freq_in_epoch == 0 + ) or (save_freq_in_epoch == 0 and iteration % self.config.checkpoint.save_iter == 0) + if not final_already_saved: + self.checkpointer.save( + model, + optimizer, + scheduler, + grad_scaler, + iteration=iteration, + epoch=final_epoch if save_freq_in_epoch > 0 else None, + ) self.callbacks.on_train_end(model, iteration=iteration) self.checkpointer.finalize() distributed.barrier() diff --git a/cosmos_framework/utils/callback.py b/cosmos_framework/utils/callback.py index ec95bdc85..8a922ed0b 100644 --- a/cosmos_framework/utils/callback.py +++ b/cosmos_framework/utils/callback.py @@ -15,11 +15,10 @@ import tqdm import wandb -from cosmos_framework.utils.lazy_config import LazyCall, instantiate from cosmos_framework.utils import distributed, log, misc, wandb_util +from cosmos_framework.utils.lazy_config import LazyCall, instantiate from cosmos_framework.utils.misc import get_local_tensor_if_DTensor - try: from megatron.core import parallel_state except ImportError: @@ -27,9 +26,9 @@ if TYPE_CHECKING: - from cosmos_framework.utils.config import Config from cosmos_framework.model._base import ImaginaireModel from cosmos_framework.trainer import ImaginaireTrainer + from cosmos_framework.utils.config import Config class CallBackGroup: @@ -312,6 +311,10 @@ def on_train_end(self, model: ImaginaireModel, iteration: int = 0) -> None: def on_app_end(self) -> None: pass + def on_exception(self, error: BaseException) -> None: + """Called when the application exits because of an uncaught exception.""" + pass + def _missing_callback_hooks(callback: object) -> list[str]: """Return required callback hooks that are absent or non-callable.""" diff --git a/cosmos_framework/utils/checkpointer.py b/cosmos_framework/utils/checkpointer.py index 816a67c1c..9f6ab5d6e 100644 --- a/cosmos_framework/utils/checkpointer.py +++ b/cosmos_framework/utils/checkpointer.py @@ -61,6 +61,7 @@ def save( scheduler: torch.optim.lr_scheduler.LRScheduler, grad_scaler: torch.amp.GradScaler, iteration: int, + epoch: int | None = None, ) -> None: """Save network weights, optimizer parameters, scheduler parameters to a checkpoint. @@ -73,7 +74,7 @@ def save( """ self.callbacks.on_save_checkpoint_start(model, iteration) - checkpoint_file = f"iter_{iteration:09}.pt" + checkpoint_file = f"epoch_{epoch}.pt" if epoch is not None else f"iter_{iteration:09}.pt" if distributed.get_rank() == 0: state_dict = dict( @@ -124,7 +125,7 @@ def _save_worker_local(self, state_dict: dict[str, torch.Tensor], checkpoint_fil if rank == 0: self._write_latest_checkpoint_file(checkpoint_file) log.success(f"Saved checkpoint (local): {checkpoint_path}") - iteration = int(checkpoint_file.replace("iter_", "").replace(".pt", "")) + iteration = int(state_dict["iteration"]) self.callbacks.on_save_checkpoint_success(iteration=iteration) except Exception as e: # noqa: BLE001 log.exception(f"Checkpoint failed to save (local): {e}") @@ -146,7 +147,7 @@ def _save_worker_object_store( if rank == 0: self._write_latest_checkpoint_file(checkpoint_file) log.success(f"Saved checkpoint (object store): {checkpoint_path}") - iteration = int(checkpoint_file.replace("iter_", "").replace(".pt", "")) + iteration = int(state_dict["iteration"]) self.callbacks.on_save_checkpoint_success(iteration=iteration) except Exception as e: # noqa: BLE001 log.exception(f"Checkpoint failed to upload (object store): {e}") @@ -313,6 +314,7 @@ def save( scheduler: torch.optim.lr_scheduler.LRScheduler, grad_scaler: torch.amp.GradScaler, iteration: int, + epoch: int | None = None, ) -> None: """Save network weights, optimizer parameters, scheduler parameters to a checkpoint. @@ -325,7 +327,7 @@ def save( """ # checkpoint_file = f"iter_{iteration:09}.pt" postfix, _, total_ema_num = model.get_ckpt_postfix() - checkpoint_file = f"iter_{iteration:09}{postfix}.pt" + checkpoint_file = f"epoch_{epoch}{postfix}.pt" if epoch is not None else f"iter_{iteration:09}{postfix}.pt" save_ranks = list(range(total_ema_num)) for _rank in save_ranks: if distributed.get_rank() == _rank: diff --git a/cosmos_framework/utils/config.py b/cosmos_framework/utils/config.py index 04ccbe4ca..a2f7c0fc0 100644 --- a/cosmos_framework/utils/config.py +++ b/cosmos_framework/utils/config.py @@ -23,11 +23,15 @@ USE_MEGATRON = True except ImportError: + # attrs/cattrs resolve postponed annotations even when this optional + # backend is unavailable; its only valid configuration then is None. + from types import NoneType as ModelParallelConfig + USE_MEGATRON = False +from cosmos_framework.utils import distributed from cosmos_framework.utils.lazy_config import LazyCall as L from cosmos_framework.utils.lazy_config import LazyDict -from cosmos_framework.utils import distributed from cosmos_framework.utils.misc import Color T = TypeVar("T") @@ -289,6 +293,9 @@ class CheckpointConfig: # Save the checkpoint every N iterations. save_iter: int = 999999999 + # Save every N completed epochs when trainer.steps_per_epoch is configured. + # A positive value takes priority over save_iter. + save_freq_in_epoch: int = 0 # Load state_dict to the models in strict mode. If True, `allow_partial_load` in dcp # planner will be set to False. DCP will raise an error if there are missing keys. @@ -455,6 +462,10 @@ class TrainerConfig: grad_scaler_args: dict = attrs.field(factory=lambda: dict(enabled=False)) # Maximum number of iterations to train the model. max_iter: int = 999999999 + # Native epoch schedule. When both values are positive, the trainer runs + # num_epochs * steps_per_epoch optimizer updates and reports epoch progress. + num_epochs: int | None = None + steps_per_epoch: int | None = None # Maximum number of iterations to validate the model. If None, validate on the entire dataset. max_val_iter: int | None = None # How often we log the training stats. @@ -463,6 +474,9 @@ class TrainerConfig: run_validation: bool = True # How often we evaluate on the validation set. validation_iter: int = 999999999 + # Validate every N completed epochs. A positive value takes priority over + # validation_iter when steps_per_epoch is configured. + validation_freq_in_epoch: int = 0 # Keep a bounded validation iterator alive so its worker can prefetch between validation calls. prefetch_validation: bool = False # Whether to run the validation on the start of the training. @@ -508,11 +522,12 @@ class Config: # Trainer configs. trainer: TrainerConfig = attrs.field(factory=TrainerConfig) + model_parallel: ModelParallelConfig | None if USE_MEGATRON: # Megatron-Core configs - model_parallel: ModelParallelConfig = attrs.field(factory=ModelParallelConfig) + model_parallel = attrs.field(factory=ModelParallelConfig) else: - model_parallel: None = None + model_parallel = None # Checkpointer configs. checkpoint: CheckpointConfig = attrs.field(factory=CheckpointConfig) diff --git a/cosmos_framework/utils/reasoner/dcp_checkpointer.py b/cosmos_framework/utils/reasoner/dcp_checkpointer.py index 703373f89..8ab8fe791 100644 --- a/cosmos_framework/utils/reasoner/dcp_checkpointer.py +++ b/cosmos_framework/utils/reasoner/dcp_checkpointer.py @@ -55,8 +55,8 @@ from cosmos_framework.checkpoint.base import AbstractCheckpointer, CheckpointLoadSource from cosmos_framework.checkpoint.s3_filesystem import S3StorageReader, S3StorageWriter -from cosmos_framework.utils.config import CheckpointConfig, JobConfig from cosmos_framework.utils import callback, distributed, log, misc +from cosmos_framework.utils.config import CheckpointConfig, JobConfig from cosmos_framework.utils.easy_io import easy_io from cosmos_framework.utils.reasoner.model_wrapper import ModelWrapper from cosmos_framework.utils.reasoner.optimizer import OptimizersContainer @@ -456,6 +456,7 @@ def save( scheduler: torch.optim.lr_scheduler.LRScheduler, grad_scaler: torch.amp.GradScaler, iteration: int, + epoch: int | None = None, ) -> None: """Save network weights, optimizer parameters, scheduler parameters to a checkpoint. @@ -469,7 +470,7 @@ def save( del grad_scaler self.callbacks.on_save_checkpoint_start(model_parts, iteration) - checkpoint_file = f"iter_{iteration:09}" + checkpoint_file = f"epoch_{epoch}" if epoch is not None else f"iter_{iteration:09}" to_save_dict = { "model": ModelWrapper(model_parts).state_dict(), "optim": optimizer.state_dict(), @@ -480,7 +481,7 @@ def save( self.callbacks.on_save_checkpoint(model_parts, state_dict=to_save_dict) for k in to_save_dict.keys(): - output_dirname = os.path.join(self.save_dirname, f"iter_{iteration:09}/{k}") + output_dirname = os.path.join(self.save_dirname, checkpoint_file, k) to_save_dict[k] = (to_save_dict[k], output_dirname) if self.async_mode == AsyncMode.ASYNC_WITH_PINNED_MEM: From e2c40f48654900e6d2be788cdbdf6e2a9d566405 Mon Sep 17 00:00:00 2001 From: Ramanathan Arunachalam Date: Thu, 1 Oct 2026 19:18:59 +0000 Subject: [PATCH 11/17] feat(sft): add dataset-neutral Nano and Edge video recipes Provide local video-QA datasets, deterministic overrides, runtime model profiles, rank-local decoding, decoded-frame caching, and launch examples. Retain scoped decoder mocks in the existing recipe regression coverage. Co-Authored-By: Claude Opus 5 (1M context) Signed-off-by: Ramanathan Arunachalam --- .../base/reasoner/experiment/tao_video_sft.py | 22 + .../reasoner/experiment/tao_video_sft_test.py | 526 ++++++++++ .../base/reasoner/experiment/wts_vlm.py | 943 ++++++++++++++++++ .../generator/local_datasets/tao_vl_reason.py | 124 +++ examples/launch_sft_wts.sh | 32 + examples/toml/sft_config/aetc_daft_vlm.toml | 99 ++ examples/toml/sft_config/wts_vlm.toml | 99 ++ examples/toml/sft_config/wts_vlm_edge.toml | 95 ++ 8 files changed, 1940 insertions(+) create mode 100644 cosmos_framework/configs/base/reasoner/experiment/tao_video_sft.py create mode 100644 cosmos_framework/configs/base/reasoner/experiment/tao_video_sft_test.py create mode 100644 cosmos_framework/configs/base/reasoner/experiment/wts_vlm.py create mode 100644 cosmos_framework/data/generator/local_datasets/tao_vl_reason.py create mode 100755 examples/launch_sft_wts.sh create mode 100644 examples/toml/sft_config/aetc_daft_vlm.toml create mode 100644 examples/toml/sft_config/wts_vlm.toml create mode 100644 examples/toml/sft_config/wts_vlm_edge.toml diff --git a/cosmos_framework/configs/base/reasoner/experiment/tao_video_sft.py b/cosmos_framework/configs/base/reasoner/experiment/tao_video_sft.py new file mode 100644 index 000000000..d0dd956e3 --- /dev/null +++ b/cosmos_framework/configs/base/reasoner/experiment/tao_video_sft.py @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: OpenMDW-1.1 + +"""Dataset-neutral public imports for TAO video-supervision SFT recipes.""" + +from cosmos_framework.configs.base.reasoner.experiment.wts_vlm import ( + VideoConversationDataset, + VideoSFTProcessor, + tao_task_aware_video_reasoning, + tao_task_aware_video_reasoning_edge, + tao_video_conversation, + tao_video_conversation_edge, +) + +__all__ = [ + "VideoConversationDataset", + "VideoSFTProcessor", + "tao_task_aware_video_reasoning", + "tao_task_aware_video_reasoning_edge", + "tao_video_conversation", + "tao_video_conversation_edge", +] diff --git a/cosmos_framework/configs/base/reasoner/experiment/tao_video_sft_test.py b/cosmos_framework/configs/base/reasoner/experiment/tao_video_sft_test.py new file mode 100644 index 000000000..1a11d06a4 --- /dev/null +++ b/cosmos_framework/configs/base/reasoner/experiment/tao_video_sft_test.py @@ -0,0 +1,526 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: OpenMDW-1.1 + +from __future__ import annotations + +import json +import pickle +import sys +import threading +import time +import types +from collections import OrderedDict +from concurrent.futures import ThreadPoolExecutor + +import pytest +from PIL import Image + +from cosmos_framework.configs.base.reasoner.experiment.tao_video_sft import ( + VideoConversationDataset, + VideoSFTProcessor, + tao_task_aware_video_reasoning, + tao_task_aware_video_reasoning_edge, + tao_video_conversation_edge, +) +from cosmos_framework.data.generator.dataflow import ContiguousBatcher +from cosmos_framework.data.generator.local_datasets.tao_vl_reason import ( + TaoVlReasonDaftDataset, + apply_daft_chat_template, + parse_path_list, +) + + +def _install_fake_daft(monkeypatch) -> list[object]: + calls: list[object] = [] + + class FakeDataset: + def __init__(self, **kwargs) -> None: + calls.append(kwargs) + self._raw_length = 2 + + def __getitem__(self, index: int) -> list[dict]: + return [{"role": "assistant", "content": f"daft-{index}"}] + + def fake_template(processor) -> None: + calls.append(processor) + + package = types.ModuleType("nvidia_tao_daft") + datasets = types.ModuleType("nvidia_tao_daft.datasets") + module = types.ModuleType("nvidia_tao_daft.datasets.tao_vl_reason_v1_0") + module.TaoVlReasonV1_0CosmosRLConversationDataset = FakeDataset + module.apply_chat_template_override = fake_template + monkeypatch.setitem(sys.modules, "nvidia_tao_daft", package) + monkeypatch.setitem(sys.modules, "nvidia_tao_daft.datasets", datasets) + monkeypatch.setitem(sys.modules, "nvidia_tao_daft.datasets.tao_vl_reason_v1_0", module) + return calls + + +def test_video_conversation_dataset_resolves_media_paths_and_limit(tmp_path) -> None: + media = tmp_path / "videos" + media.mkdir() + (media / "clip.mp4").write_bytes(b"video") + annotations = tmp_path / "annotations.json" + annotations.write_text( + json.dumps( + [ + { + "video": "clip.mp4", + "conversations": [ + {"from": "human", "value": "