Skip to content
Open
Show file tree
Hide file tree
Changes from 33 commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
e3a5fa9
chore: update Python interpreter constraints to 3.14.1
achimnol Dec 8, 2025
4d6deb2
chore: upgrade dependencies for Python 3.14 compatibility
achimnol Dec 8, 2025
4e9f94a
doc: Update README
achimnol Dec 9, 2025
c36e9fc
chore: Update tool lockfiles
achimnol Dec 10, 2025
c130046
chore: Update pex/pip versions
achimnol Dec 10, 2025
5b9952d
deps: Upgrade Python dependencies for 3.14 support
achimnol Dec 10, 2025
39f77fa
Merge branch 'main' into chore/python-3.14-upgrade
achimnol Dec 10, 2025
978c5ec
Merge branch 'main' into chore/python-3.14-upgrade
achimnol Dec 10, 2025
b19915b
deps: Update main dependency sets and lockfiles
achimnol Dec 10, 2025
8aa7fe2
deps: Sync pydantic version of the mypy tool resolve and the main req…
achimnol Dec 10, 2025
01a64a7
deps: Change target Python version to 3.14.2
achimnol Dec 10, 2025
fff19b5
doc: Update mentions in docs
achimnol Dec 10, 2025
2e713c5
chore: Upgrade mypy to 1.19
achimnol Dec 10, 2025
3cb49bd
fix: Type errors
achimnol Dec 10, 2025
1fe245f
chore: Update ruff version (0.14.0 -> 0.14.8)
achimnol Dec 10, 2025
9541470
chore: Update Python versions in pyscript.sh, python.sh and build-mac…
achimnol Dec 10, 2025
9c42f91
chore: Ensure Python 3.13 syntax compatibility when formatting/linting
achimnol Dec 10, 2025
e8e1487
Merge branch 'main' into chore/python-3.14-upgrade
achimnol Dec 11, 2025
9b8150e
Merge branch 'main' into chore/python-3.14-upgrade
achimnol Jan 8, 2026
bfb0d40
Merge branch 'main' into chore/python-3.14-upgrade
achimnol Jan 8, 2026
074659f
Merge branch 'main' into chore/python-3.14-upgrade
achimnol Jan 8, 2026
a74b78b
chore: Regenerate black lockfile (resolving merge conflict)
achimnol Jan 8, 2026
30d3760
fix: Type error induced by aiohttp 3.13.3's breaking public API change
achimnol Jan 8, 2026
efd445d
Merge branch 'main' into chore/python-3.14-upgrade
achimnol Jan 8, 2026
efa9608
Merge branch 'main' into chore/python-3.14-upgrade
achimnol Jan 9, 2026
2e17c92
Merge branch 'main' into chore/python-3.14-upgrade and upgrade to Pyt…
rapsealk Apr 1, 2026
3bc266b
Merge branch 'main' into chore/python-3.14-upgrade
rapsealk Apr 1, 2026
b612ac2
chore: update api schema dump
rapsealk Apr 1, 2026
fa63373
doc: add changelog fragment for Python 3.14.3 upgrade
rapsealk Apr 1, 2026
a75c8aa
Merge branch 'chore/python-3.14-upgrade' of https://github.com/lablup…
rapsealk Apr 1, 2026
2621cef
fix: resolve mypy 1.19 type errors for Python 3.14 upgrade
rapsealk Apr 1, 2026
298cf90
fix: use explicit imports for sqlalchemy.ext.asyncio
rapsealk Apr 1, 2026
1f59c0a
fix: remove unused sqlalchemy import in test_database.py
rapsealk Apr 1, 2026
2a0e489
fix: use minor version in uv helper scripts for broader compatibility
rapsealk Apr 1, 2026
05171e3
doc: update Pantsbuild version references to 2.29.x
rapsealk Apr 1, 2026
347c84d
Merge branch 'main' into chore/python-3.14-upgrade
rapsealk Apr 1, 2026
3458c43
Merge branch 'main' into chore/python-3.14-upgrade
rapsealk Apr 2, 2026
cd1adf1
Merge branch 'main' into chore/python-3.14-upgrade
rapsealk Apr 3, 2026
2ffccf5
Merge branch 'main' into chore/python-3.14-upgrade
rapsealk Apr 3, 2026
0909caa
Merge branch 'main' into chore/python-3.14-upgrade
rapsealk Apr 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ Requirements

### Python & Build Tools

- **Python**: 3.13.x (main branch requires CPython 3.13.7)
- **Pantsbuild**: 2.27.x
- **Python**: 3.14.x (main branch requires CPython 3.14.3)
- **Pantsbuild**: 2.29.x
- See [full version compatibility table](src/ai/backend/README.md#development-setup)

### Infrastructure
Expand Down
1 change: 1 addition & 0 deletions changes/7199.enhance.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Upgrade the base CPython version from 3.13.7 to 3.14.3 with updated dependencies and tooling (BA-3306)
20 changes: 10 additions & 10 deletions docs/dev/daily-workflows.rst
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ For example, the Ruff executable is exported as ``dist/export/bin/ruff``.
Other tools that require Python virtualenv (e.g., Mypy) are still exported as virtualenvs.

For Pantsbuild 2.23 or older, the tool binaries are exported as regular Python virtualenvs like
``dist/export/python/virtualenvs/ruff/3.13.7/bin/ruff``.
``dist/export/python/virtualenvs/ruff/3.14.3/bin/ruff``.

Currently we have the following Python tools to configure in this way:

Expand Down Expand Up @@ -279,7 +279,7 @@ Set the following keys in the workspace settings to configure Python tools:
* - Setting ID
- Example value
* - ``mypy-type-checker.interpreter``
- ``["/abs/path/to/dist/export/python/virtualenvs/mypy/3.13.7/bin/python"]`` (use the absolute path)
- ``["/abs/path/to/dist/export/python/virtualenvs/mypy/3.14.3/bin/python"]`` (use the absolute path)
* - ``mypy-type-checker.importStrategy``
- ``"fromEnvironment"``
* - ``ruff.path``
Expand Down Expand Up @@ -313,7 +313,7 @@ Then put the followings in ``.vimrc`` (or ``.nvimrc`` for NeoVim) in the build r
.. code-block:: vim

let s:cwd = getcwd()
let g:ale_python_mypy_executable = s:cwd . '/dist/export/python/virtualenvs/mypy/3.13.7/bin/mypy'
let g:ale_python_mypy_executable = s:cwd . '/dist/export/python/virtualenvs/mypy/3.14.3/bin/mypy'
let g:ale_python_ruff_executable = s:cwd . '/dist/export/bin/ruff'
let g:ale_linters = { "python": ['ruff', 'mypy'] }
let g:ale_fixers = {'python': ['ruff']}
Expand All @@ -330,10 +330,10 @@ as basedpyright shares most configurations with pyright).
{
"coc.preferences.formatOnType": true,
"coc.preferences.formatOnSaveFiletypes": ["python"],
"python.pythonPath": "dist/export/python/virtualenvs/python-default/3.13.7/bin/python",
"python.analysis.extraPaths": ["dist/export/python/virtualenvs/pytest/3.13.7/lib/python3.13/site-packages"],
"python.pythonPath": "dist/export/python/virtualenvs/python-default/3.14.3/bin/python",
"python.analysis.extraPaths": ["dist/export/python/virtualenvs/pytest/3.14.3/lib/python3.14/site-packages"],
"python.linting.mypyEnabled": true,
"python.linting.mypyPath": "dist/export/python/virtualenvs/mypy/3.13.7/bin/mypy",
"python.linting.mypyPath": "dist/export/python/virtualenvs/mypy/3.14.3/bin/mypy",
"python.linting.ruffEnabled": true,
"python.linting.ruffPath": "dist/export/bin/ruff",
"python.formatting.provider": "ruff",
Expand All @@ -345,10 +345,10 @@ as basedpyright shares most configurations with pyright).
{
"coc.preferences.formatOnType": true,
"coc.preferences.formatOnSaveFiletypes": ["python"],
"python.pythonPath": "dist/export/python/virtualenvs/python-default/3.13.7/bin/python",
"python.analysis.extraPaths": ["dist/export/python/virtualenvs/pytest/3.13.7/lib/python3.13/site-packages"],
"python.pythonPath": "dist/export/python/virtualenvs/python-default/3.14.3/bin/python",
"python.analysis.extraPaths": ["dist/export/python/virtualenvs/pytest/3.14.3/lib/python3.14/site-packages"],
"python.linting.mypyEnabled": true,
"python.linting.mypyPath": "dist/export/python/virtualenvs/mypy/3.13.7/bin/mypy",
"python.linting.mypyPath": "dist/export/python/virtualenvs/mypy/3.14.3/bin/mypy",
"python.linting.ruffEnabled": false, // delegate to coc-ruff
"python.formatting.provider": "none", // delegate to coc-ruff
"pyright.organizeimports.provider": "none", // delegate to coc-ruff
Expand Down Expand Up @@ -725,7 +725,7 @@ Making a new release
line, e.g., using ``set noeol`` in Vim. This is also configured in
``./editorconfig``)

* Run ``LOCKSET=towncrier/3.13.7 ./py -m towncrier`` to auto-generate the changelog.
* Run ``LOCKSET=towncrier/3.14.3 ./py -m towncrier`` to auto-generate the changelog.

- You may append ``--draft`` to see a preview of the changelog update without
actually modifying the filesystem.
Expand Down
8 changes: 4 additions & 4 deletions docs/install/install-from-package/os-preparation.rst
Original file line number Diff line number Diff line change
Expand Up @@ -133,10 +133,10 @@ For example,

.. code-block:: console

$ curl -L "https://github.com/astral-sh/python-build-standalone/releases/download/20241219/cpython-3.13.3+20250409-x86_64-unknown-linux-gnu-install_only.tar.gz" > cpython-3.13.3+20250409-x86_64-unknown-linux-gnu-install_only.tar.gz
$ tar -xf "cpython-3.13.3+20241219-x86_64-unknown-linux-gnu-install_only.tar.gz"
$ curl -L "https://github.com/astral-sh/python-build-standalone/releases/download/20260325/cpython-3.14.3+20260325-x86_64-unknown-linux-gnu-install_only.tar.gz" > cpython-3.14.3+20260325-x86_64-unknown-linux-gnu-install_only.tar.gz
$ tar -xf "cpython-3.14.3+20260325-x86_64-unknown-linux-gnu-install_only.tar.gz"
$ mkdir -p "/home/bai/.static-python/versions"
$ mv python "/home/bai/.static-python/versions/3.13.3"
$ mv python "/home/bai/.static-python/versions/3.14.3"

Then, you can create multiple virtual environments per service. To create a
virtual environment for Backend.AI Manager and activate it, for example, you may run:
Expand All @@ -145,7 +145,7 @@ virtual environment for Backend.AI Manager and activate it, for example, you may

$ mkdir "${HOME}/manager"
$ cd "${HOME}/manager"
$ ~/.static-python/versions/3.13.3/bin/python3 -m venv .venv
$ ~/.static-python/versions/3.14.3/bin/python3 -m venv .venv
$ source .venv/bin/activate
$ pip install -U pip setuptools wheel

Expand Down
13 changes: 11 additions & 2 deletions docs/manager/graphql-reference/supergraph.graphql
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
schema
@link(url: "https://specs.apollo.dev/link/v1.0")
@link(url: "https://specs.apollo.dev/join/v0.4", for: EXECUTION)
@link(url: "https://specs.apollo.dev/join/v0.5", for: EXECUTION)
{
query: Query
mutation: Mutation
Expand All @@ -11,7 +11,7 @@ directive @join__directive(graphs: [join__Graph!], name: String!, args: join__Di

directive @join__enumValue(graph: join__Graph!) repeatable on ENUM_VALUE

directive @join__field(graph: join__Graph, requires: join__FieldSet, provides: join__FieldSet, type: String, external: Boolean, override: String, usedOverridden: Boolean, overrideLabel: String) repeatable on FIELD_DEFINITION | INPUT_FIELD_DEFINITION
directive @join__field(graph: join__Graph, requires: join__FieldSet, provides: join__FieldSet, type: String, external: Boolean, override: String, usedOverridden: Boolean, overrideLabel: String, contextArguments: [join__ContextArgument!]) repeatable on FIELD_DEFINITION | INPUT_FIELD_DEFINITION

directive @join__graph(name: String!, url: String!) on ENUM_VALUE

Expand Down Expand Up @@ -6421,10 +6421,19 @@ interface Item
id: ID
}

input join__ContextArgument {
name: String!
type: String!
context: String!
selection: join__FieldValue!
}

scalar join__DirectiveArguments

scalar join__FieldSet

scalar join__FieldValue

enum join__Graph {
GRAPHENE @join__graph(name: "graphene", url: "http://host.docker.internal:8091/admin/gql")
STRAWBERRY @join__graph(name: "strawberry", url: "http://host.docker.internal:8091/admin/gql/strawberry")
Expand Down
2 changes: 1 addition & 1 deletion docs/manager/graphql-reference/v2-schema.graphql
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
directive @oneOf on INPUT_OBJECT

schema @link(url: "https://specs.apollo.dev/federation/v2.7", import: ["@external", "@key", "@shareable"]) {
schema @link(url: "https://specs.apollo.dev/federation/v2.11", import: ["@external", "@key", "@shareable"]) {
query: Query
mutation: Mutation
subscription: Subscription
Expand Down
13 changes: 7 additions & 6 deletions pants.toml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ enable_resolves = true
# * Let other developers do:
# - Run `pants export` again
# - Update their local IDE/editor's interpreter path configurations
interpreter_constraints = ["CPython==3.13.7"]
interpreter_constraints = ["CPython==3.14.3"]
interpreter_versions_universe = ["3.11", "3.12", "3.13", "3.14"]
tailor_pex_binary_targets = false
pip_version = "25.3"

Expand Down Expand Up @@ -107,13 +108,13 @@ known_versions = [
install_from_resolve = "black"

[ruff]
version = "0.14.0"
version = "0.14.8"
# take tar.gz files and their checksums from the GitHub release (darwin and linux-musl)
known_versions = [
"0.14.0|macos_arm64|0b7c193d5c45eda02226720eb75239fabeca995d5a0eb3830fd2973caa3030ec|12364514",
"0.14.0|macos_x86_64|880ae046b435eb306cd557a7481eed6da463b85f283ba1f2c1e2ad7c139ed6c5|13149751",
"0.14.0|linux_arm64|34a25398f03e7d32a4ec406c5c841c6e183fa0a96fbdd40b7e7eec1f177b360e|12465179",
"0.14.0|linux_x86_64|ed6d1b8407a1d228dc332fb19057e86e04a6cd3c2beacdb324ad6ff2a3f9071b|13647531",
"0.14.8|macos_arm64|4efc019832a6b9225f650ee256d31b2e875021cae662963d533c78b5cf865f52|12262293",
"0.14.8|macos_x86_64|c53af0ba3cbc5e9e8f7768d28a7ff2d0795843e39302891093227bc6df343e94|13284305",
"0.14.8|linux_arm64|0b3464f54fa56f514c29e92bcf05867b914ad6c246e2ddbe4cce5c0700f2a3d9|12604548",
"0.14.8|linux_x86_64|0f5496a3d2413b3cb85bbf9e4a6f95b5db127ac10989ecb3d8c0c0a0a74a892b|13826546",
]

[pytest]
Expand Down
11 changes: 6 additions & 5 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[project]
requires-python = "~=3.13.7"
requires-python = "~=3.14.3"
name = "backend.ai"
dynamic = ["version"]

Expand Down Expand Up @@ -78,6 +78,7 @@ asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"

[tool.ruff]
target-version = "py313" # keep Python 3.13 compatibility for backports
line-length = 100
src = ["src"]

Expand Down Expand Up @@ -328,8 +329,8 @@ strict = true
mypy_path = "stubs:src"
namespace_packages = true
explicit_package_bases = true
python_executable = "dist/export/python/virtualenvs/python-default/3.13.7/bin/python"
disable_error_code = ["typeddict-unknown-key", "import-untyped"]
python_executable = "dist/export/python/virtualenvs/python-default/3.14.3/bin/python"
disable_error_code = ["typeddict-unknown-key", "import-untyped", "untyped-decorator"]
enable_error_code = ["possibly-undefined"]
warn_unreachable = true

Expand Down Expand Up @@ -381,7 +382,7 @@ module = [
ignore_errors = true

[tool.pyright]
pythonVersion = "3.13"
pythonVersion = "3.14"
extraPaths = ["src"]
include = [
"src",
Expand All @@ -395,7 +396,7 @@ exclude = [
"src/ai/backend/web/static",
]
venvPath = "dist/export/python/virtualenvs/python-default"
venv = "3.13.7"
venv = "3.14.3"
typeCheckingMode = "standard"
reportMatchNotExhaustive = "error"

Expand Down
Loading
Loading