Repository navigation
feat: support Python 3.15 - #768
Draft
vishal-bala wants to merge 3 commits into
Draft
vishal-bala wants to merge 3 commits into
vishal-bala wants to merge 3 commits into
Conversation
Lift the Requires-Python cap to <3.16 and add 3.15 to the classifiers, black target versions and the test and lint CI matrices. - Floor beartype at 0.23.1 in the mcp extra. Earlier releases import typing.no_type_check_decorator, which 3.15 removed, so fastmcp failed to import and the MCP server fell back to its stub. - Relock: rpds-py 2026.9.1 (0.30.0 cannot build on 3.15) and beartype 0.23.1. The re-split forks also move 3.14 onto google-cloud-aiplatform 1.154.0, grpcio 1.84.0 and protobuf 6.33.6. - Bump uv to 0.13.1, the first line that ships CPython 3.15.0 final. - torch has no cp315 wheels on PyPI yet, so the 3.15 legs install every extra except sentence-transformers and all. Tests marked requires_hf now skip when sentence-transformers is not installed, and the HF tests that lacked the marker carry it. - Loosen the ** TypeError assertion; 3.15 reworded the message. - Ignore pytest-asyncio 0.23's asyncio deprecation warnings. On 3.15 they number in the millions and slow the suite about twentyfold.
- Mark test_different_vector_dtypes requires_hf. It builds the default HF vectorizer, and its bare except turned the ImportError on 3.15 into a misleading "Redis version too low" skip. - Give the SemanticRouter repr tests a stub vectorizer instead of the requires_hf marker, so they keep running on 3.15. __repr__ never touches the vectorizer; only the field's HFTextVectorizer default needed it. - Note in the installation guide and CONTRIBUTING that the sentence-transformers and all extras cannot install on 3.15 yet, with the uv sync command that leaves them out.
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.
Motivation
Python 3.15.0 is final, but every recent RedisVL release declares
Requires-Python >=3.10,<3.15, sopip install redisvlfails on 3.15 (#757). A trial run of the full suite on 3.15.0 found that RedisVL's own code needs no changes. The blockers were the version cap, two locked dependencies that break on 3.15, and torch, which doesn't publish 3.15 wheels on PyPI yet.Changes
Packaging
requires-pythonis now<3.16. This PR also adds the 3.15 classifier and black'spy315target; the black dev floor rises to 26.5.0, the first release that acceptspy315.mcpextra now floorsbeartype>=0.23.1. fastmcp pulls beartype in transitively, and releases before 0.23 importtyping.no_type_check_decorator, which 3.15 removed. With the old beartype, fastmcp fails to import on 3.15 and the MCP server quietly falls back to its stub. This caused about 70 MCP test failures.Lock file
uv lock --checkon it.CI
sentence-transformersandallextras, because torch has no cp315 wheels on PyPI. Every other extra still installs.Tests
requires_hfnow skip when sentence-transformers isn't installed. The marker had been registered but did nothing since 36a5e4d.TypeErrortext, which 3.15 reworded from "argument after **" to "Value after **". It now matches both.asyncio.iscoroutinefunctionand the event-loop-policy functions are ignored, scoped to thepytest_asynciomodule. On 3.15 there were about 9 million per run, which made the suite roughly 19 times slower (about 1000 s against 54 s).Docs
sentence-transformersandallcan't install on 3.15 yet, and give theuv synccommand that leaves them out.Release Notes
redisvl[sentence-transformers]andredisvl[all]can't install until PyTorch publishes cp315 wheels on PyPI. Install the individual extras you need instead.pipalso refuses thevoyageaiandsql-redisextras on 3.15, because those packages declare upper bounds below 3.15. uv installs them.redisvl[mcp]now requiresbeartype>=0.23.1.Review record
Reviewed at
584740faby Claude Code (Opus 5.5) withpre-pr-review.Lenses: correctness (always); security (changes
.github/workflows, dependency floors and the lock file); tests (changes conftest skip logic, test markers and an assertion). Skipped: design (no API change); docs (no docs in the reviewed commit; the docs notes came from a kept finding); Redis behaviour (no command or query building).test_different_vector_dtypesneeds the HF vectorizer but was unmarked. On 3.15 its bareexceptturned the ImportError into a "Redis version too low" skip (tests/integration/test_message_history.py:704).requires_hfonly because the vectorizer field's default buildsHFTextVectorizer. They now pass a stub vectorizer and run on 3.15 (tests/unit/test_repr.py:107,:127).make install, CONTRIBUTING'suv sync --all-extras,pip install redisvl[all]) fail on 3.15 because of torch. The installation guide and CONTRIBUTING now say so and give the workaround (docs/user_guide/installation.md:59,CONTRIBUTING.md:84).uv sync --all-extras --frozen, which fails the job outright if sentence-transformers is missing, so it can't turn into silent skips.191df9e9.make installstill runsuv sync --all-extrasand fails on 3.15. It's documented, not changed.pytest-asyncio<0.24pin before 3.16, which removes the APIs it calls. That's a follow-up.voyageai's<3.15andsql-redis's<3.14Requires-Python.Verified:
pytest -n autoon 3.15.0, installed as the 3.15 CI leg will be (2496 passed, 281 skipped including 137 HF skips, 0 failed, Redis 8.4).tests/unit/test_repr.pyon 3.15 and 3.13 (11 passed each);test_different_vector_dtypes(skipped with the HF reason on 3.15, passed on 3.13).mypy ./redisvlon 3.15 (no issues).pre-commit run --all-files(passed).uv lock --checkwith uv 0.12.3 and 0.13.1 (passed).pipinto a clean 3.15 venv asredisvl[mcp]. It imports, and the MCP server uses the real fastmcp.Later commits:
f963b37d(fixes for the three kept findings);191df9e9(CONTRIBUTING now says Python 3.10 through 3.15, one line).Not checked:
pip installof thevoyageaiandsql-redisextras on 3.15.f963b37d. Only the touched tests were re-run.