From 3013ce7452c4312a0ba5f0ddb34759c251b186aa Mon Sep 17 00:00:00 2001 From: bochinski <30434375+bochinski@users.noreply.github.com> Date: Thu, 3 Sep 2026 18:52:29 +0200 Subject: [PATCH 1/8] Add Python 3.13 support - pyproject.toml: requires-python ">=3.10,<3.14", add the 3.13 classifier; regenerate uv.lock accordingly. - PythonVersion enum and default image prefixes: add 3.13 in flytekit core, the sqlalchemy plugin and the openai batch plugin. Without it, DefaultImages.find_image_for() raises "(3, 13) is not a valid PythonVersion" on 3.13. - CI (pythonbuild.yml): run 3.13 on pull requests and in the nightly matrix, enable the extras (tensorflow/pytorch) tests on 3.13, exclude pandas<2 and plugins whose dependencies do not support 3.13 yet. - dev-requirements.in: tensorflow>=2.21 and torch>=2.6 on 3.13; lift the protobuf<5 dev pin on 3.13 only (tensorflow 2.21 needs protobuf>=6, and the issue behind the pin, flyteorg/flyte#5448, was fixed upstream). - Publish py3.13 images in pythonpublish.yml and build_image.yml. - pytorch extras: torch>=2.6 defaults torch.load(weights_only=True), which cannot load the whole nn.Module / checkpoint objects flytekit stores. Pass weights_only=False where the keyword exists. This is required for the extras tests on 3.13 and already fails in the nightly 3.11 run. Closes flyteorg/flyte#6993 Rebased onto #3477: its pytorch weights_only handling replaces the one from this commit. Co-Authored-By: Claude Fable 5.1 Signed-off-by: bochinski <30434375+bochinski@users.noreply.github.com> (cherry picked from commit 605e0b19b1087758b6f0cb598d11fcc6052aec8f) Signed-off-by: Dennis Keck <26092524+fellhorn@users.noreply.github.com> --- .github/workflows/build_image.yml | 2 +- .github/workflows/pythonbuild.yml | 28 +++++++++++++++++-- .github/workflows/pythonpublish.yml | 1 + dev-requirements.in | 5 ++++ pyproject.toml | 1 + .../unit/configuration/test_image_config.py | 2 ++ 6 files changed, 36 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build_image.yml b/.github/workflows/build_image.yml index 51beb7b4dc..de287409d9 100644 --- a/.github/workflows/build_image.yml +++ b/.github/workflows/build_image.yml @@ -28,7 +28,7 @@ jobs: needs: get-version strategy: matrix: - python-version: ["3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12", "3.13"] steps: - uses: actions/checkout@v4 with: diff --git a/.github/workflows/pythonbuild.yml b/.github/workflows/pythonbuild.yml index 552c6d2a6c..35fcd95bfb 100644 --- a/.github/workflows/pythonbuild.yml +++ b/.github/workflows/pythonbuild.yml @@ -27,9 +27,9 @@ jobs: - name: Set Python versions for run run: | if [[ ${{ github.event_name }} == "schedule" ]]; then - echo "python_versions=[\"3.10\",\"3.11\",\"3.12\"]" >> $GITHUB_ENV + echo "python_versions=[\"3.10\",\"3.11\",\"3.12\",\"3.13\"]" >> $GITHUB_ENV else - echo "python_versions=[\"3.12\"]" >> $GITHUB_ENV + echo "python_versions=[\"3.12\",\"3.13\"]" >> $GITHUB_ENV fi build: @@ -139,6 +139,9 @@ jobs: pandas: "pandas>=2.0.0" - pandas: "pandas<2.0.0" python-version: "3.12" + # pandas 1.x has no wheels for python 3.13 + - pandas: "pandas<2.0.0" + python-version: "3.13" steps: - uses: actions/checkout@v4 @@ -389,6 +392,27 @@ jobs: # Segmentation fault on python 3.12: https://github.com/flyteorg/flyte/issues/5020 - python-version: 3.12 plugin-names: "flytekit-kf-pytorch" + # Python 3.13: the exclusions below mirror the python 3.12 ones (same dependency limitations) and should + # be revisited together with them. + - python-version: 3.13 + plugin-names: "flytekit-airflow" + - python-version: 3.13 + plugin-names: "flytekit-kf-pytorch" + - python-version: 3.13 + plugin-names: "flytekit-modin" + - python-version: 3.13 + plugin-names: "flytekit-onnx-pytorch" + - python-version: 3.13 + plugin-names: "flytekit-ray" + - python-version: 3.13 + plugin-names: "flytekit-vaex" + # The tensorflow releases that provide python 3.13 wheels require protobuf>=6, which conflicts with the + # "protobuf<5" pin used below for the plugin tests. + - python-version: 3.13 + plugin-names: "flytekit-mlflow" + # flytekitplugins-duckdb declares python_requires<3.13 (duckdb<=1.0.0 pin) + - python-version: 3.13 + plugin-names: "flytekit-duckdb" steps: - uses: actions/checkout@v4 - name: "Clear action cache" diff --git a/.github/workflows/pythonpublish.yml b/.github/workflows/pythonpublish.yml index f5cd80c6ce..fe37ee7fbd 100644 --- a/.github/workflows/pythonpublish.yml +++ b/.github/workflows/pythonpublish.yml @@ -124,6 +124,7 @@ jobs: - "3.10" - "3.11" - "3.12" + - "3.13" steps: - uses: actions/checkout@v4 with: diff --git a/dev-requirements.in b/dev-requirements.in index 16dec73e85..26c87c6851 100644 --- a/dev-requirements.in +++ b/dev-requirements.in @@ -23,12 +23,17 @@ pytest-icdiff # Tensorflow is not available for python 3.12 yet: https://github.com/tensorflow/tensorflow/issues/62003 tensorflow<=2.15.1; python_version<'3.12' +# tensorflow>=2.21 ships python 3.13 wheels (linux x86_64/aarch64, macos arm64, windows) but requires protobuf>=6, +# see the protobuf constraint below. +tensorflow>=2.21.0; python_version>='3.13' # Newer versions of torch bring in nvidia dependencies that are not present in windows, so # we put this constraint while we do not have per-environment requirements files torch<=1.12.1; python_version<'3.11' # pytorch 2 supports python 3.11 # pytorch 2 does not support 3.12 yet: https://github.com/pytorch/pytorch/issues/110436 torch; python_version<'3.12' +# pytorch>=2.6 ships python 3.13 wheels +torch>=2.6.0; python_version>='3.13' pydantic # TODO: Currently, the python-magic library causes build errors on Windows due to its dependency on DLLs for libmagic. diff --git a/pyproject.toml b/pyproject.toml index 684ceda4f0..77ae28e9b3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -61,6 +61,7 @@ classifiers = [ "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Software Development", diff --git a/tests/flytekit/unit/configuration/test_image_config.py b/tests/flytekit/unit/configuration/test_image_config.py index ca841fa497..8e2bf2904f 100644 --- a/tests/flytekit/unit/configuration/test_image_config.py +++ b/tests/flytekit/unit/configuration/test_image_config.py @@ -16,6 +16,7 @@ [ (PythonVersion.PYTHON_3_9, "cr.flyte.org/flyteorg/flytekit:py3.9-latest"), (PythonVersion.PYTHON_3_10, "cr.flyte.org/flyteorg/flytekit:py3.10-latest"), + (PythonVersion.PYTHON_3_13, "cr.flyte.org/flyteorg/flytekit:py3.13-latest"), (PythonVersion.PYTHON_3_14, "cr.flyte.org/flyteorg/flytekit:py3.14-latest"), ], ) @@ -27,6 +28,7 @@ def test_defaults(python_version_enum, expected_image_string): "python_version_enum, flytekit_version, expected_image_string", [ (PythonVersion.PYTHON_3_9, "v0.32.0", "cr.flyte.org/flyteorg/flytekit:py3.9-0.32.0"), + (PythonVersion.PYTHON_3_13, "v1.17.0", "cr.flyte.org/flyteorg/flytekit:py3.13-1.17.0"), ], ) def test_set_both(python_version_enum, flytekit_version, expected_image_string): From f392ef6f9c948128a5a0a44712d8933e86e4db9a Mon Sep 17 00:00:00 2001 From: bochinski <30434375+bochinski@users.noreply.github.com> Date: Thu, 3 Sep 2026 19:24:04 +0200 Subject: [PATCH 2/8] Run the extras tests on Python 3.12 The tensorflow and pytorch transformer tests were skipped on 3.12 because neither library had 3.12 wheels when 3.12 support was added. Both upstream issues have been closed since: tensorflow ships 3.12 wheels from 2.16 (tensorflow/tensorflow#62003) and pytorch from 2.2 (pytorch/pytorch#110436). - dev-requirements.in: install tensorflow on >=3.12 and torch on >=3.11 with a single line each instead of per-version lines. With the protobuf<5 pin that is kept on <3.13, 3.12 resolves to tensorflow 2.19 and 3.13 to the latest release. - pythonbuild.yml: drop the 3.12 skip of the extras step. Effect on the resolved dev environments: 3.10, 3.11 and 3.13 are unchanged. On 3.12 every job that installs dev-requirements.in now also gets tensorflow 2.19 and torch 2.14 (including the CUDA wheels torch pulls in on linux), and numpy is capped to 2.1.x by tensorflow 2.19. Verified locally on 3.12 with tensorflow 2.19.1 / torch 2.14.0 / protobuf 4.25.9: unit_test_extras 123 passed, unit_test 1970 + 25 passed. Co-Authored-By: Claude Fable 5.1 Signed-off-by: bochinski <30434375+bochinski@users.noreply.github.com> (cherry picked from commit 51d5fa8010c33f7367c6888928d24f01362ddc94) Signed-off-by: Dennis Keck <26092524+fellhorn@users.noreply.github.com> --- .github/workflows/pythonbuild.yml | 3 --- dev-requirements.in | 15 ++++++--------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/.github/workflows/pythonbuild.yml b/.github/workflows/pythonbuild.yml index 35fcd95bfb..4e4ee90400 100644 --- a/.github/workflows/pythonbuild.yml +++ b/.github/workflows/pythonbuild.yml @@ -110,9 +110,6 @@ jobs: uv pip uninstall --system pandas pyarrow uv pip freeze - name: Run extras unit tests with coverage - # Skip this step if running on python 3.12 due to https://github.com/tensorflow/tensorflow/issues/62003 - # and https://github.com/pytorch/pytorch/issues/110436 - if: ${{ matrix.python-version != '3.12' }} run: | make unit_test_extras_codecov - name: Codecov diff --git a/dev-requirements.in b/dev-requirements.in index 26c87c6851..a233a65a48 100644 --- a/dev-requirements.in +++ b/dev-requirements.in @@ -21,19 +21,16 @@ keyrings.alt setuptools_scm pytest-icdiff -# Tensorflow is not available for python 3.12 yet: https://github.com/tensorflow/tensorflow/issues/62003 tensorflow<=2.15.1; python_version<'3.12' -# tensorflow>=2.21 ships python 3.13 wheels (linux x86_64/aarch64, macos arm64, windows) but requires protobuf>=6, -# see the protobuf constraint below. -tensorflow>=2.21.0; python_version>='3.13' +# tensorflow>=2.16 ships python 3.12 wheels and >=2.20 ships python 3.13 wheels (linux x86_64/aarch64, macos arm64, +# windows). With the protobuf pin below this resolves to tensorflow<2.20 on 3.12 and to the latest release on 3.13 +# (tensorflow>=2.20 requires protobuf>=5). +tensorflow; python_version>='3.12' # Newer versions of torch bring in nvidia dependencies that are not present in windows, so # we put this constraint while we do not have per-environment requirements files torch<=1.12.1; python_version<'3.11' -# pytorch 2 supports python 3.11 -# pytorch 2 does not support 3.12 yet: https://github.com/pytorch/pytorch/issues/110436 -torch; python_version<'3.12' -# pytorch>=2.6 ships python 3.13 wheels -torch>=2.6.0; python_version>='3.13' +# pytorch>=2.2 ships python 3.12 wheels and >=2.6 ships python 3.13 wheels +torch; python_version>='3.11' pydantic # TODO: Currently, the python-magic library causes build errors on Windows due to its dependency on DLLs for libmagic. From 42e4c658591cbc0dd53b1ab0115e004118d05d64 Mon Sep 17 00:00:00 2001 From: bochinski <30434375+bochinski@users.noreply.github.com> Date: Thu, 3 Sep 2026 20:34:31 +0200 Subject: [PATCH 3/8] CI: run only Python 3.13 on pull requests, fix 3.13 comments - Pull requests run a single interpreter version again (the convention since #3380), now 3.13 instead of 3.12. The nightly matrix still covers 3.10 to 3.13. This halves the pull request matrix and keeps the heavier 3.12 dev environment (tensorflow/torch) out of pull request runs. - Reword the comment on the 3.13 plugin exclusions: they mirror the 3.12 list but have not been verified on 3.13, several of the underlying issues are closed by now. - The tensorflow releases with 3.13 wheels require protobuf>=5, not >=6 (2.20 needs 5.28, 2.21 needs 6.31). - dev-requirements.in: give types-protobuf the same version split as protobuf, so the stubs match the runtime on 3.13. Co-Authored-By: Claude Fable 5.1 Signed-off-by: bochinski <30434375+bochinski@users.noreply.github.com> (cherry picked from commit 750bea8df291d7dc1ac686e9254565b2812d5693) Signed-off-by: Dennis Keck <26092524+fellhorn@users.noreply.github.com> --- .github/workflows/pythonbuild.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pythonbuild.yml b/.github/workflows/pythonbuild.yml index 4e4ee90400..5bcd4e86d6 100644 --- a/.github/workflows/pythonbuild.yml +++ b/.github/workflows/pythonbuild.yml @@ -29,7 +29,7 @@ jobs: if [[ ${{ github.event_name }} == "schedule" ]]; then echo "python_versions=[\"3.10\",\"3.11\",\"3.12\",\"3.13\"]" >> $GITHUB_ENV else - echo "python_versions=[\"3.12\",\"3.13\"]" >> $GITHUB_ENV + echo "python_versions=[\"3.13\"]" >> $GITHUB_ENV fi build: @@ -389,8 +389,8 @@ jobs: # Segmentation fault on python 3.12: https://github.com/flyteorg/flyte/issues/5020 - python-version: 3.12 plugin-names: "flytekit-kf-pytorch" - # Python 3.13: the exclusions below mirror the python 3.12 ones (same dependency limitations) and should - # be revisited together with them. + # Python 3.13: the exclusions below mirror the python 3.12 ones. They have not been verified on 3.13 + # (several of the underlying issues are closed by now); revisit both lists together. - python-version: 3.13 plugin-names: "flytekit-airflow" - python-version: 3.13 @@ -403,7 +403,7 @@ jobs: plugin-names: "flytekit-ray" - python-version: 3.13 plugin-names: "flytekit-vaex" - # The tensorflow releases that provide python 3.13 wheels require protobuf>=6, which conflicts with the + # The tensorflow releases that provide python 3.13 wheels require protobuf>=5, which conflicts with the # "protobuf<5" pin used below for the plugin tests. - python-version: 3.13 plugin-names: "flytekit-mlflow" From 8694ddfadbdefdd967b1a61055407517f3b75c59 Mon Sep 17 00:00:00 2001 From: Dennis Keck <26092524+fellhorn@users.noreply.github.com> Date: Sun, 25 Oct 2026 17:37:03 +0100 Subject: [PATCH 4/8] ci: test and publish Python 3.14 - Nightly matrix covers 3.10-3.14, pull requests run 3.14 only. - Exclude pandas<2 and the 3.13 plugin exclusions on 3.14, plus flytekit-mlflow (its tests need tensorflow, which has no 3.14 wheels). - Drop the 3.13 flytekit-mlflow exclusion: it was only needed because of the protobuf<5 pin, which is gone. - Build and publish py3.14 images. - dev-requirements.in: install tensorflow only below 3.14 and skip the tensorflow extras tests on 3.14. - Add the 3.14 classifier. Co-Authored-By: Claude Opus 5.5 Signed-off-by: Dennis Keck <26092524+fellhorn@users.noreply.github.com> --- .github/workflows/build_image.yml | 2 +- .github/workflows/pythonbuild.yml | 30 ++++++++++++++----- .github/workflows/pythonpublish.yml | 1 + dev-requirements.in | 7 ++--- pyproject.toml | 1 + .../unit/extras/tensorflow/conftest.py | 5 ++++ 6 files changed, 34 insertions(+), 12 deletions(-) create mode 100644 tests/flytekit/unit/extras/tensorflow/conftest.py diff --git a/.github/workflows/build_image.yml b/.github/workflows/build_image.yml index de287409d9..26d047a288 100644 --- a/.github/workflows/build_image.yml +++ b/.github/workflows/build_image.yml @@ -28,7 +28,7 @@ jobs: needs: get-version strategy: matrix: - python-version: ["3.10", "3.11", "3.12", "3.13"] + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] steps: - uses: actions/checkout@v4 with: diff --git a/.github/workflows/pythonbuild.yml b/.github/workflows/pythonbuild.yml index 5bcd4e86d6..98558f3cf1 100644 --- a/.github/workflows/pythonbuild.yml +++ b/.github/workflows/pythonbuild.yml @@ -27,9 +27,9 @@ jobs: - name: Set Python versions for run run: | if [[ ${{ github.event_name }} == "schedule" ]]; then - echo "python_versions=[\"3.10\",\"3.11\",\"3.12\",\"3.13\"]" >> $GITHUB_ENV + echo "python_versions=[\"3.10\",\"3.11\",\"3.12\",\"3.13\",\"3.14\"]" >> $GITHUB_ENV else - echo "python_versions=[\"3.13\"]" >> $GITHUB_ENV + echo "python_versions=[\"3.14\"]" >> $GITHUB_ENV fi build: @@ -136,9 +136,11 @@ jobs: pandas: "pandas>=2.0.0" - pandas: "pandas<2.0.0" python-version: "3.12" - # pandas 1.x has no wheels for python 3.13 + # pandas 1.x has no wheels for python 3.13+ - pandas: "pandas<2.0.0" python-version: "3.13" + - pandas: "pandas<2.0.0" + python-version: "3.14" steps: - uses: actions/checkout@v4 @@ -403,13 +405,27 @@ jobs: plugin-names: "flytekit-ray" - python-version: 3.13 plugin-names: "flytekit-vaex" - # The tensorflow releases that provide python 3.13 wheels require protobuf>=5, which conflicts with the - # "protobuf<5" pin used below for the plugin tests. - - python-version: 3.13 - plugin-names: "flytekit-mlflow" # flytekitplugins-duckdb declares python_requires<3.13 (duckdb<=1.0.0 pin) - python-version: 3.13 plugin-names: "flytekit-duckdb" + # Python 3.14: same as python 3.13. Not verified either. + - python-version: 3.14 + plugin-names: "flytekit-airflow" + - python-version: 3.14 + plugin-names: "flytekit-kf-pytorch" + - python-version: 3.14 + plugin-names: "flytekit-modin" + - python-version: 3.14 + plugin-names: "flytekit-onnx-pytorch" + - python-version: 3.14 + plugin-names: "flytekit-ray" + - python-version: 3.14 + plugin-names: "flytekit-vaex" + - python-version: 3.14 + plugin-names: "flytekit-duckdb" + # Tensorflow, a dependency of the flytekit-mlflow tests, has no python 3.14 wheels yet + - python-version: 3.14 + plugin-names: "flytekit-mlflow" steps: - uses: actions/checkout@v4 - name: "Clear action cache" diff --git a/.github/workflows/pythonpublish.yml b/.github/workflows/pythonpublish.yml index fe37ee7fbd..feb13b466b 100644 --- a/.github/workflows/pythonpublish.yml +++ b/.github/workflows/pythonpublish.yml @@ -125,6 +125,7 @@ jobs: - "3.11" - "3.12" - "3.13" + - "3.14" steps: - uses: actions/checkout@v4 with: diff --git a/dev-requirements.in b/dev-requirements.in index a233a65a48..909c5ba2b7 100644 --- a/dev-requirements.in +++ b/dev-requirements.in @@ -23,13 +23,12 @@ pytest-icdiff tensorflow<=2.15.1; python_version<'3.12' # tensorflow>=2.16 ships python 3.12 wheels and >=2.20 ships python 3.13 wheels (linux x86_64/aarch64, macos arm64, -# windows). With the protobuf pin below this resolves to tensorflow<2.20 on 3.12 and to the latest release on 3.13 -# (tensorflow>=2.20 requires protobuf>=5). -tensorflow; python_version>='3.12' +# windows). There are no python 3.14 wheels yet, the tensorflow tests are skipped there. +tensorflow; python_version>='3.12' and python_version<'3.14' # Newer versions of torch bring in nvidia dependencies that are not present in windows, so # we put this constraint while we do not have per-environment requirements files torch<=1.12.1; python_version<'3.11' -# pytorch>=2.2 ships python 3.12 wheels and >=2.6 ships python 3.13 wheels +# pytorch>=2.2 ships python 3.12 wheels, >=2.6 python 3.13 wheels and >=2.9 python 3.14 wheels torch; python_version>='3.11' pydantic diff --git a/pyproject.toml b/pyproject.toml index 77ae28e9b3..528aab63ce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -62,6 +62,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Software Development", diff --git a/tests/flytekit/unit/extras/tensorflow/conftest.py b/tests/flytekit/unit/extras/tensorflow/conftest.py new file mode 100644 index 0000000000..dd12e9f7ce --- /dev/null +++ b/tests/flytekit/unit/extras/tensorflow/conftest.py @@ -0,0 +1,5 @@ +import sys + +# tensorflow does not ship python 3.14 wheels yet, see dev-requirements.in +if sys.version_info >= (3, 14): + collect_ignore_glob = ["*"] From 5a2197ea9a989cf7f6e1de13156fb8920c39e703 Mon Sep 17 00:00:00 2001 From: Dennis Keck <26092524+fellhorn@users.noreply.github.com> Date: Sun, 25 Oct 2026 18:00:52 +0100 Subject: [PATCH 5/8] ci: skip ydata-profiling in the dev image on Python 3.14 ydata-profiling declares requires-python <3.14 and caps numba<0.63, which has no 3.14 wheels; uv ignores the upper bound and fails building llvmlite from source. The integration tests do not use it. Co-Authored-By: Claude Opus 5.5 Signed-off-by: Dennis Keck <26092524+fellhorn@users.noreply.github.com> --- Dockerfile.dev | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile.dev b/Dockerfile.dev index aaac1739d3..6615c40bd3 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -47,7 +47,7 @@ RUN SETUPTOOLS_SCM_PRETEND_VERSION_FOR_FLYTEKIT=$PSEUDO_VERSION \ pyarrow \ pygments \ scikit-learn \ - ydata-profiling \ + "ydata-profiling; python_version<'3.14'" \ && apt-get clean autoclean \ && apt-get autoremove --yes \ && rm -rf /var/lib/{apt,dpkg,cache,log}/ \ From c430025d8cae8df3dc32f1fb49d690bdcf113bba Mon Sep 17 00:00:00 2001 From: Dennis Keck <26092524+fellhorn@users.noreply.github.com> Date: Sun, 25 Oct 2026 19:05:22 +0100 Subject: [PATCH 6/8] fix(omegaconf): read class annotations via inspect.get_annotations On Python 3.14 class annotations are evaluated lazily and no longer live in the class __dict__, so all_annotations() returned an empty ChainMap and every structured config failed with "Key ... not found in type annotations". Co-Authored-By: Claude Opus 5.5 Signed-off-by: Dennis Keck <26092524+fellhorn@users.noreply.github.com> --- .../flytekitplugins/omegaconf/type_information.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/flytekit-omegaconf/flytekitplugins/omegaconf/type_information.py b/plugins/flytekit-omegaconf/flytekitplugins/omegaconf/type_information.py index b6a7b247e6..a17ea369ce 100644 --- a/plugins/flytekit-omegaconf/flytekitplugins/omegaconf/type_information.py +++ b/plugins/flytekit-omegaconf/flytekitplugins/omegaconf/type_information.py @@ -1,4 +1,5 @@ import dataclasses +import inspect import typing from collections import ChainMap @@ -33,7 +34,9 @@ def all_annotations(cls: typing.Type) -> ChainMap: Returns a dictionary-like ChainMap that includes annotations for all attributes defined in cls or inherited from superclasses. """ - return ChainMap(*(c.__annotations__ for c in cls.__mro__ if "__annotations__" in c.__dict__)) + # inspect.get_annotations also covers python 3.14, where class annotations are evaluated lazily and are + # no longer stored in the class __dict__. + return ChainMap(*(inspect.get_annotations(c) for c in cls.__mro__)) def extract_node_type( From c233565bab2a99fef0345ae023945994e2f25099 Mon Sep 17 00:00:00 2001 From: Dennis Keck <26092524+fellhorn@users.noreply.github.com> Date: Sun, 25 Oct 2026 19:05:22 +0100 Subject: [PATCH 7/8] ci: adjust plugin matrix for Python 3.13 and 3.14 - Do not force numpy<2 for the onnx, sqlalchemy and pandera plugins on 3.13+: the pandas/pyarrow releases with 3.13+ wheels require numpy>=2. - Exclude greatexpectations and whylogs on 3.13+ (both require numpy<2), deck-standard on 3.14 (ydata-profiling requires <3.14) and dbt on 3.14 (the pinned dbt-core<1.8 does not work on 3.14). Co-Authored-By: Claude Opus 5.5 Signed-off-by: Dennis Keck <26092524+fellhorn@users.noreply.github.com> --- .github/workflows/pythonbuild.yml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pythonbuild.yml b/.github/workflows/pythonbuild.yml index 98558f3cf1..81e1982e88 100644 --- a/.github/workflows/pythonbuild.yml +++ b/.github/workflows/pythonbuild.yml @@ -426,6 +426,21 @@ jobs: # Tensorflow, a dependency of the flytekit-mlflow tests, has no python 3.14 wheels yet - python-version: 3.14 plugin-names: "flytekit-mlflow" + # great-expectations<1.0 and whylogs require numpy<2, which has no python 3.13+ wheels + - python-version: 3.13 + plugin-names: "flytekit-greatexpectations" + - python-version: 3.14 + plugin-names: "flytekit-greatexpectations" + - python-version: 3.13 + plugin-names: "flytekit-whylogs" + - python-version: 3.14 + plugin-names: "flytekit-whylogs" + # ydata-profiling declares python_requires<3.14 + - python-version: 3.14 + plugin-names: "flytekit-deck-standard" + # dbt-core<1.8 (pinned by the plugin) fails to validate its config on python 3.14 + - python-version: 3.14 + plugin-names: "flytekit-dbt" steps: - uses: actions/checkout@v4 - name: "Clear action cache" @@ -453,7 +468,8 @@ jobs: echo "Workspace: $GITHUB_WORKSPACE" uv pip install --system -U $GITHUB_WORKSPACE "git+https://github.com/flyteorg/flyte.git@master#subdirectory=flyteidl" # TODO: remove this when numpy v2 in onnx has been resolved - if [[ ${{ matrix.plugin-names }} == *"onnx"* || ${{ matrix.plugin-names }} == "flytekit-sqlalchemy" || ${{ matrix.plugin-names }} == "flytekit-pandera" ]]; then + # Not on python 3.13+: the pandas/pyarrow releases with 3.13 wheels require numpy>=2. + if [[ ${{ matrix.python-version }} != "3.13" && ${{ matrix.python-version }} != "3.14" ]] && [[ ${{ matrix.plugin-names }} == *"onnx"* || ${{ matrix.plugin-names }} == "flytekit-sqlalchemy" || ${{ matrix.plugin-names }} == "flytekit-pandera" ]]; then uv pip install --system "numpy<2.0.0" fi # The -U step above re-resolves aiohttp (a flytekit dependency) back to the latest, From d041e6b56f35e7c02801a17ba8ffcbbf829c13a1 Mon Sep 17 00:00:00 2001 From: Dennis Keck <26092524+fellhorn@users.noreply.github.com> Date: Sun, 25 Oct 2026 20:47:17 +0100 Subject: [PATCH 8/8] ci: install pydantic explicitly in the dev image The pydantic integration workflow only worked because ydata-profiling pulled pydantic in, which is not installed on Python 3.14. Co-Authored-By: Claude Opus 5.5 Signed-off-by: Dennis Keck <26092524+fellhorn@users.noreply.github.com> --- Dockerfile.dev | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile.dev b/Dockerfile.dev index 6615c40bd3..fbb7511005 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -44,6 +44,7 @@ RUN SETUPTOOLS_SCM_PRETEND_VERSION_FOR_FLYTEKIT=$PSEUDO_VERSION \ pandas \ pillow \ plotly \ + pydantic \ pyarrow \ pygments \ scikit-learn \