From 458f2d9b67b18d587ad0fc7eafe1338b157f0376 Mon Sep 17 00:00:00 2001 From: Sebastian Raschka Date: Sat, 27 Sep 2025 08:38:07 -0500 Subject: [PATCH] Test dependencies with Python 3.13 (#843) * Custom python 3.13 entry in pyproject.toml * amend * update * update * update * Update pyproject.toml * Update pyproject.toml * Update pyproject.toml * update --- .../workflows/basic-tests-latest-python.yml | 51 +++++++++++++++++++ .github/workflows/basic-tests-linux-uv.yml | 2 +- .github/workflows/basic-tests-old-pytorch.yml | 3 +- .github/workflows/basic-tests-pytorch-rc.yml | 2 +- pyproject.toml | 16 +++--- 5 files changed, 63 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/basic-tests-latest-python.yml diff --git a/.github/workflows/basic-tests-latest-python.yml b/.github/workflows/basic-tests-latest-python.yml new file mode 100644 index 0000000..2e60844 --- /dev/null +++ b/.github/workflows/basic-tests-latest-python.yml @@ -0,0 +1,51 @@ +name: Test latest PyTorch-compatible Python version +on: + push: + branches: [ main ] + paths: + - '**/*.py' # Run workflow for changes in Python files + - '**/*.ipynb' + - '**/*.yaml' + - '**/*.yml' + - '**/*.sh' + pull_request: + branches: [ main ] + paths: + - '**/*.py' + - '**/*.ipynb' + - '**/*.yaml' + - '**/*.yml' + - '**/*.sh' + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Install dependencies + run: | + curl -LsSf https://astral.sh/uv/install.sh | sh + uv sync --dev --python=3.13 + uv add pytest-ruff nbval + + - name: Test Selected Python Scripts + run: | + source .venv/bin/activate + pytest --ruff setup/02_installing-python-libraries/tests.py + pytest --ruff ch04/01_main-chapter-code/tests.py + pytest --ruff ch05/01_main-chapter-code/tests.py + pytest --ruff ch06/01_main-chapter-code/tests.py + + - name: Validate Selected Jupyter Notebooks + run: | + source .venv/bin/activate + pytest --ruff --nbval ch02/01_main-chapter-code/dataloader.ipynb + pytest --ruff --nbval ch03/01_main-chapter-code/multihead-attention.ipynb + pytest --ruff --nbval ch02/04_bonus_dataloader-intuition/dataloader-intuition.ipynb diff --git a/.github/workflows/basic-tests-linux-uv.yml b/.github/workflows/basic-tests-linux-uv.yml index b9cec98..9109176 100644 --- a/.github/workflows/basic-tests-linux-uv.yml +++ b/.github/workflows/basic-tests-linux-uv.yml @@ -39,7 +39,7 @@ jobs: shell: bash run: | curl -LsSf https://astral.sh/uv/install.sh | sh - uv sync --dev --python=3.10 # tests for backwards compatibility + uv sync --dev # tests for backwards compatibility uv pip install -r ch05/07_gpt_to_llama/tests/test-requirements-extra.txt uv add pytest-ruff nbval diff --git a/.github/workflows/basic-tests-old-pytorch.yml b/.github/workflows/basic-tests-old-pytorch.yml index 053e619..0a7c6d8 100644 --- a/.github/workflows/basic-tests-old-pytorch.yml +++ b/.github/workflows/basic-tests-old-pytorch.yml @@ -38,8 +38,7 @@ jobs: curl -LsSf https://astral.sh/uv/install.sh | sh uv sync --dev --python=3.10 # tests for backwards compatibility uv pip install -r ch05/07_gpt_to_llama/tests/test-requirements-extra.txt - uv add torch==${{ matrix.pytorch-version }} - uv add pytest-ruff nbval + uv pip install torch==${{ matrix.pytorch-version }} pytest-ruff nbval - name: Test Selected Python Scripts run: | diff --git a/.github/workflows/basic-tests-pytorch-rc.yml b/.github/workflows/basic-tests-pytorch-rc.yml index 536125c..f563504 100644 --- a/.github/workflows/basic-tests-pytorch-rc.yml +++ b/.github/workflows/basic-tests-pytorch-rc.yml @@ -32,7 +32,7 @@ jobs: - name: Install dependencies run: | curl -LsSf https://astral.sh/uv/install.sh | sh - uv sync --dev --python=3.10 # tests for backwards compatibility + uv sync --dev # tests for backwards compatibility uv add pytest-ruff nbval uv pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu diff --git a/pyproject.toml b/pyproject.toml index 5adffc4..19e593d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,16 +7,19 @@ name = "llms-from-scratch" version = "1.0.18" description = "Implement a ChatGPT-like LLM in PyTorch from scratch, step by step" readme = "README.md" -requires-python = ">=3.10,<=3.13" +requires-python = ">=3.10,<3.14" dependencies = [ - "torch>=2.2.2,<2.6; sys_platform == 'darwin' and platform_machine == 'x86_64' and python_version < '3.13'", - "torch>=2.2.2; sys_platform == 'darwin' and platform_machine == 'arm64'", - "torch>=2.2.2; sys_platform == 'linux'", - "torch>=2.2.2; sys_platform == 'win32'", + 'torch>=2.6; python_version >= "3.13"', + "torch>=2.2.2,<2.6; sys_platform == 'darwin' and platform_machine == 'x86_64' and python_version < '3.12'", + "torch>=2.2.2; sys_platform == 'darwin' and platform_machine == 'arm64' and python_version < '3.12'", + "torch>=2.2.2; sys_platform == 'linux' and python_version < '3.12'", + "torch>=2.2.2; sys_platform == 'win32' and python_version < '3.12'", + "tensorflow>=2.16.2; sys_platform == 'darwin' and platform_machine == 'x86_64'", "tensorflow>=2.18.0; sys_platform == 'darwin' and platform_machine == 'arm64'", "tensorflow>=2.18.0; sys_platform == 'linux'", "tensorflow>=2.18.0; sys_platform == 'win32'", + "jupyterlab>=4.0", "tiktoken>=0.5.1", "matplotlib>=3.7.1", @@ -33,9 +36,8 @@ llms-from-scratch = { workspace = true } [dependency-groups] dev = [ "build>=1.2.2.post1", - "llms-from-scratch", "twine>=6.1.0", - "tokenizers>=0.21.1", + "tokenizers>=0.22.0", "safetensors>=0.6.2", ]