Repository navigation
chore!: drop Python 3.10 support, add Python 3.15 - #13054
Draft
julian-risch wants to merge 13 commits into
Draft
julian-risch wants to merge 13 commits into
julian-risch wants to merge 13 commits into
Conversation
Python 3.10 reaches end of life in October 2026 and Python 3.15.0 is released. - Require Python >=3.11, add the 3.15 classifier, and move floor-pinned CI workflows to 3.11 - Import Self and NotRequired from typing and drop the direct typing_extensions dependency - Keep ChatRole and ConverterMimeType as (str, Enum): StrEnum would change their str() output - Make two type serialization tests aware of the 3.14+ PEP 604 Union representation - Update contributor docs and add a release note Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BhTpApLrajennECwiuPc2k
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BhTpApLrajennECwiuPc2k
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Contributor
Coverage reportClick to see where and how coverage changed
This report was generated by python-coverage-comment-action |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
julian-risch
commented
Oct 1, 2026
julian-risch
commented
Oct 1, 2026
Co-authored-by: Julian Risch <julianrisch@gmx.de>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
To be reverted once the 3.15 run is green. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
jq 1.12.0 has no cp315 Windows wheel and its sdist does not build on Windows. To be reverted together with the 3.15 flip. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…n run_async asyncio.wait returns a set, so iterating it gave variadic inputs an order that varied between runs and platforms. Python 3.15 on Linux exposed it in the async pipeline feature tests. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… order in run_async" This reverts commit 03922b4.
Pipeline.run_async writes each sync component's outputs when its thread finishes, so variadic inputs arrive in completion order. Six scenarios assumed the sync order; CI on Python 3.15 hit three of them on every run. Follows the AnyOrder approach of the Python 3.14 PR (#10634). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The 3.15 run passed on all OSes: https://github.com/deepset-ai/haystack/actions/runs/38069150959 Reverts ba1409e, c9c1d0b and def2e55. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Related Issues
Proposed Changes:
Python 3.10 reaches end of life in October 2026, and Python 3.15.0 was released on 2026-10-09.
requires-pythonis now>=3.11. The 3.10 classifier is replaced by a 3.15 classifier. All workflows that used 3.10 as the base version now use 3.11.typing_extensions:NotRequiredandSelfnow come fromtyping. The license-compliance exclusion that only existed fortyping_extensionsis removed.datetime.UTCinstead oftimezone.utc. Comments that described 3.10-only behavior intype_utils.pyandfilters.pyare rewritten.ChatRoleandConverterMimeTypestayclass X(str, Enum), marked# noqa: UP042. Switching toStrEnumwould changestr()of the members. That is user-visible forChatRole, andMultiFileConverter.__init__()parses it to name its internal components.sys.version_info >= (3, 14), because from 3.14 ontyping.Union/Optionalserialize with PEP 604 syntax (str | None).test/core/pipeline/features/test_run.pynow compare variadic inputs withAnyOrder.Pipeline.run_async()writes a component's outputs when its thread finishes, so a variadic socket receives inputs in completion order.AnyOrdergained__iter__so it can be nested.CONTRIBUTING.mdandAGENTS.mdare updated for the new range. Until PyPI has cp315 torch wheels,CONTRIBUTING.mdexplains how to build the test env on 3.15 from the PyTorch CPU index.How did you test it?
Locally on Python 3.15.0 final (macOS arm64):
hatch run test:unit: 6754 passed, 10 skipped. All skips are missing-API-key or document-store capability skips.hatch run test:integration-only-fastwithOPENAI_API_KEY: 315 passed, 19 skipped (Azure credentials and existing skip markers).hatch run test:typesandhatch run fmt: clean.Optional/Unionsockets, plus aPipeline.dumps()/loads()round trip.In CI, temporary commits switched
tests.ymlto Python 3.15 and were then reverted, as in #10634.actions/setup-pythondoesn't list 3.15.0 yet, so that run used 3.15.0rc3.download.pytorch.org/whl/cpu;test_json.pyignored there;pypdf<6.20(see below).Notes for the reviewer
JSONConverterwith ajq_schemafor now. On Linux and macOS, jq builds from sdist.test_pypdf_to_document.py::test_run_detect_paragraphs_to_be_used_in_split_passagestill expects the old "inter nal" text, so it fails on any Python version. test: expect pypdf 6.20 text extraction in PyPDFToDocument test #13203 fixes it; once it merges, I merge main into this PR.PYTHON_LAZY_IMPORTS=all(PEP 810),with LazyImport(...)no longer catches a missing optional dependency.check()passes, and users get a rawModuleNotFoundErrorat first use instead of the "pip install" hint. The global mode is opt-in, so this needs a follow-up rather than a blocker.Checklist
fix:,feat:,build:,chore:,ci:,docs:,style:,refactor:,perf:,test:and added!in case the PR includes breaking changes.🤖 Generated with Claude Code