diff --git a/.github/workflows/check_pypi_version.yml b/.github/workflows/check_pypi_version.yml index b383e87be..7fadeba54 100644 --- a/.github/workflows/check_pypi_version.yml +++ b/.github/workflows/check_pypi_version.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12", "3.13"] steps: - name: Set up Python ${{ matrix.python-version }} diff --git a/.github/workflows/ubuntu-tests.yml b/.github/workflows/ubuntu-tests.yml index 753470af0..a849af008 100644 --- a/.github/workflows/ubuntu-tests.yml +++ b/.github/workflows/ubuntu-tests.yml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12", "3.13"] steps: - name: Check out repository diff --git a/.github/workflows/windows-tests.yml b/.github/workflows/windows-tests.yml index f79f84b66..a4dee9e0f 100644 --- a/.github/workflows/windows-tests.yml +++ b/.github/workflows/windows-tests.yml @@ -25,7 +25,7 @@ jobs: runs-on: windows-latest strategy: matrix: - python-version: ["3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12", "3.13"] steps: - name: Check out repository @@ -49,4 +49,3 @@ jobs: AIDER_ANALYTICS: false run: | pytest - diff --git a/.github/workflows/windows_check_pypi_version.yml b/.github/workflows/windows_check_pypi_version.yml index 6bd48fdf6..00867282f 100644 --- a/.github/workflows/windows_check_pypi_version.yml +++ b/.github/workflows/windows_check_pypi_version.yml @@ -15,7 +15,7 @@ jobs: runs-on: windows-latest strategy: matrix: - python-version: ["3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12", "3.13"] defaults: run: shell: pwsh # Use PowerShell for all run steps diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index abe35a1c0..ea08cd610 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -50,7 +50,7 @@ cd aider It is recommended to create a virtual environment outside of the repository to keep your development environment isolated. -#### Using `venv` (Python 3.9 and later) +#### Using `venv` (Python 3.10 and later) ``` python -m venv /path/to/venv @@ -155,7 +155,7 @@ The built documentation will be available in the `aider/website/_site` directory ### Python Compatibility -Aider supports Python versions 3.9, 3.10, 3.11, and 3.12. When contributing code, ensure compatibility with these supported Python versions. +Aider supports Python versions 3.10, 3.11, 3.12, and 3.13. When contributing code, ensure compatibility with these supported Python versions. ### Code Style @@ -188,7 +188,7 @@ pytest tests/basic/test_coder.py::TestCoder::test_specific_case The project uses GitHub Actions for continuous integration. The testing workflows are defined in the following files: -- `.github/workflows/ubuntu-tests.yml`: Runs tests on Ubuntu for Python versions 3.9 through 3.12. +- `.github/workflows/ubuntu-tests.yml`: Runs tests on Ubuntu for Python versions 3.10 through 3.13. - `.github/workflows/windows-tests.yml`: Runs that on Windows These workflows are triggered on push and pull request events to the `main` branch, ignoring changes to the `aider/website/**` and `README.md` files. diff --git a/aider/website/docs/install.md b/aider/website/docs/install.md index 0ebf1d2e2..5d52a2524 100644 --- a/aider/website/docs/install.md +++ b/aider/website/docs/install.md @@ -75,7 +75,7 @@ python -m pip install pipx # If you need to install pipx pipx install aider-chat ``` -You can use pipx to install aider with python versions 3.9-3.12. +You can use pipx to install aider with python versions 3.10-3.13. Also see the [docs on other methods for installing pipx itself](https://pipx.pypa.io/stable/installation/). @@ -93,7 +93,7 @@ using a to keep aider's dependencies separated. -You can use pip to install aider with python versions 3.9-3.12. +You can use pip to install aider with python versions 3.10-3.13. ```bash python -m pip install -U --upgrade-strategy only-if-needed aider-chat @@ -112,4 +112,3 @@ they often install aider with incorrect dependencies. There are some [optional install steps](/docs/install/optional.html) you could consider. See the [usage instructions](https://aider.chat/docs/usage.html) to start coding with aider. - diff --git a/pyproject.toml b/pyproject.toml index e92d278d4..5569bf2b7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,10 +12,11 @@ classifiers = [ "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Programming Language :: Python", "Topic :: Software Development", ] -requires-python = ">=3.10,<3.13" +requires-python = ">=3.10,<3.14" dynamic = ["dependencies", "optional-dependencies", "version"] [project.urls] diff --git a/requirements.txt b/requirements.txt index d26543ad1..146ba4ba8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -154,10 +154,6 @@ h11==0.16.0 # via # -c requirements/common-constraints.txt # httpcore -hf-xet==1.1.0 - # via - # -c requirements/common-constraints.txt - # huggingface-hub httpcore==1.0.9 # via # -c requirements/common-constraints.txt @@ -172,7 +168,7 @@ httpx==0.28.1 # -c requirements/common-constraints.txt # litellm # openai -huggingface-hub==0.31.1 +huggingface-hub==0.31.2 # via # -c requirements/common-constraints.txt # tokenizers @@ -213,7 +209,7 @@ jsonschema-specifications==2025.4.1 # via # -c requirements/common-constraints.txt # jsonschema -litellm==1.68.1 +litellm==1.69.2 # via # -c requirements/common-constraints.txt # -r requirements/requirements.in @@ -250,7 +246,7 @@ networkx==3.4.2 # via # -c requirements/common-constraints.txt # -r requirements/requirements.in -numpy==1.26.4 +numpy==2.2.5 # via # -c requirements/common-constraints.txt # scipy @@ -485,14 +481,12 @@ tree-sitter-yaml==0.7.0 typing-extensions==4.13.2 # via # -c requirements/common-constraints.txt - # anyio # beautifulsoup4 # google-generativeai # huggingface-hub # openai # pydantic # pydantic-core - # referencing # typing-inspection typing-inspection==0.4.0 # via @@ -523,6 +517,8 @@ zipp==3.21.0 # via # -c requirements/common-constraints.txt # importlib-metadata - -tree-sitter==0.23.2; python_version < "3.10" -tree-sitter==0.24.0; python_version >= "3.10" + +tree-sitter>=0.24.0 + +# Remove if Python 3.13 support https://github.com/jiaaro/pydub/pull/816 gets released +audioop-lts>=0.2.1; python_version >= "3.13" diff --git a/requirements/common-constraints.txt b/requirements/common-constraints.txt index 122473cc7..8ee774907 100644 --- a/requirements/common-constraints.txt +++ b/requirements/common-constraints.txt @@ -9,6 +9,8 @@ aiohttp==3.11.18 # llama-index-core aiosignal==1.3.2 # via aiohttp +aiosqlite==0.21.0 + # via llama-index-core altair==5.5.0 # via streamlit annotated-types==0.7.0 @@ -103,7 +105,7 @@ filetype==1.2.0 # via llama-index-core flake8==7.2.0 # via -r requirements/requirements.in -fonttools==4.57.0 +fonttools==4.58.0 # via matplotlib frozenlist==1.6.0 # via @@ -142,7 +144,7 @@ google-auth==2.40.1 # google-generativeai google-auth-httplib2==0.2.0 # via google-api-python-client -google-cloud-bigquery==3.31.0 +google-cloud-bigquery==3.32.0 # via -r requirements/requirements-dev.in google-cloud-core==2.4.3 # via google-cloud-bigquery @@ -172,8 +174,6 @@ grpcio-status==1.71.0 # via google-api-core h11==0.16.0 # via httpcore -hf-xet==1.1.0 - # via huggingface-hub httpcore==1.0.9 # via httpx httplib2==0.22.0 @@ -185,7 +185,7 @@ httpx==0.28.1 # litellm # llama-index-core # openai -huggingface-hub[inference]==0.31.1 +huggingface-hub[inference]==0.31.2 # via # llama-index-embeddings-huggingface # sentence-transformers @@ -233,13 +233,13 @@ jsonschema-specifications==2025.4.1 # via jsonschema kiwisolver==1.4.8 # via matplotlib -litellm==1.68.1 +litellm==1.69.2 # via -r requirements/requirements.in -llama-index-core==0.12.26 +llama-index-core==0.12.35 # via # -r requirements/requirements-help.in # llama-index-embeddings-huggingface -llama-index-embeddings-huggingface==0.5.3 +llama-index-embeddings-huggingface==0.5.4 # via -r requirements/requirements-help.in lox==0.13.0 # via -r requirements/requirements-dev.in @@ -269,7 +269,7 @@ multiprocess==0.70.18 # via pathos mypy-extensions==1.1.0 # via typing-inspect -narwhals==1.38.2 +narwhals==1.39.0 # via altair nest-asyncio==1.6.0 # via llama-index-core @@ -282,7 +282,7 @@ nltk==3.9.1 # via llama-index-core nodeenv==1.9.1 # via pre-commit -numpy==1.26.4 +numpy==2.2.5 # via # -r requirements/requirements-help.in # contourpy @@ -482,8 +482,10 @@ semver==3.0.4 # via -r requirements/requirements-dev.in sentence-transformers==4.1.0 # via llama-index-embeddings-huggingface -setuptools==80.3.1 - # via pip-tools +setuptools==80.4.0 + # via + # pip-tools + # torch shellingham==1.5.4 # via typer shtab==1.7.2 @@ -507,9 +509,9 @@ soundfile==0.13.1 # via -r requirements/requirements.in soupsieve==2.7 # via beautifulsoup4 -sqlalchemy[asyncio]==2.0.40 +sqlalchemy[asyncio]==2.0.41 # via llama-index-core -streamlit==1.45.0 +streamlit==1.45.1 # via -r requirements/requirements-browser.in sympy==1.14.0 # via torch @@ -529,7 +531,7 @@ tokenizers==0.21.1 # transformers toml==0.10.2 # via streamlit -torch==2.2.2 +torch==2.7.0 # via # -r requirements/requirements-help.in # sentence-transformers @@ -556,12 +558,12 @@ tree-sitter-language-pack==0.7.3 # via grep-ast tree-sitter-yaml==0.7.0 # via tree-sitter-language-pack -typer==0.15.3 +typer==0.15.4 # via -r requirements/requirements-dev.in typing-extensions==4.13.2 # via + # aiosqlite # altair - # anyio # beautifulsoup4 # google-generativeai # huggingface-hub @@ -570,7 +572,6 @@ typing-extensions==4.13.2 # pydantic # pydantic-core # pyee - # referencing # sentence-transformers # sqlalchemy # streamlit diff --git a/requirements/pydub.in b/requirements/pydub.in new file mode 100644 index 000000000..483a11d83 --- /dev/null +++ b/requirements/pydub.in @@ -0,0 +1,2 @@ +# Remove if Python 3.13 support https://github.com/jiaaro/pydub/pull/816 gets released +audioop-lts>=0.2.1; python_version >= "3.13" diff --git a/requirements/requirements-browser.txt b/requirements/requirements-browser.txt index 3f9dbbbc5..41faeba54 100644 --- a/requirements/requirements-browser.txt +++ b/requirements/requirements-browser.txt @@ -58,11 +58,11 @@ markupsafe==3.0.2 # via # -c requirements/common-constraints.txt # jinja2 -narwhals==1.38.2 +narwhals==1.39.0 # via # -c requirements/common-constraints.txt # altair -numpy==1.26.4 +numpy==2.2.5 # via # -c requirements/common-constraints.txt # pandas @@ -123,7 +123,7 @@ smmap==5.0.2 # via # -c requirements/common-constraints.txt # gitdb -streamlit==1.45.0 +streamlit==1.45.1 # via # -c requirements/common-constraints.txt # -r requirements/requirements-browser.in @@ -143,7 +143,6 @@ typing-extensions==4.13.2 # via # -c requirements/common-constraints.txt # altair - # referencing # streamlit tzdata==2025.2 # via diff --git a/requirements/requirements-dev.txt b/requirements/requirements-dev.txt index 4d49ef191..9f0ec5b95 100644 --- a/requirements/requirements-dev.txt +++ b/requirements/requirements-dev.txt @@ -54,7 +54,7 @@ filelock==3.18.0 # via # -c requirements/common-constraints.txt # virtualenv -fonttools==4.57.0 +fonttools==4.58.0 # via # -c requirements/common-constraints.txt # matplotlib @@ -69,7 +69,7 @@ google-auth==2.40.1 # google-api-core # google-cloud-bigquery # google-cloud-core -google-cloud-bigquery==3.31.0 +google-cloud-bigquery==3.32.0 # via # -c requirements/common-constraints.txt # -r requirements/requirements-dev.in @@ -143,7 +143,7 @@ nodeenv==1.9.1 # via # -c requirements/common-constraints.txt # pre-commit -numpy==1.26.4 +numpy==2.2.5 # via # -c requirements/common-constraints.txt # contourpy @@ -269,7 +269,7 @@ semver==3.0.4 # via # -c requirements/common-constraints.txt # -r requirements/requirements-dev.in -setuptools==80.3.1 +setuptools==80.4.0 # via # -c requirements/common-constraints.txt # pip-tools @@ -281,7 +281,7 @@ six==1.17.0 # via # -c requirements/common-constraints.txt # python-dateutil -typer==0.15.3 +typer==0.15.4 # via # -c requirements/common-constraints.txt # -r requirements/requirements-dev.in diff --git a/requirements/requirements-help.in b/requirements/requirements-help.in index 43e302cca..a294fc25d 100644 --- a/requirements/requirements-help.in +++ b/requirements/requirements-help.in @@ -1,11 +1,11 @@ llama-index-embeddings-huggingface -# Because sentence-transformers doesn't like >=2 -numpy<2 +# sentence-transformers 4 requires numpy 2 (indirectly through scipy 1.14 which dropped Python 3.9 support) +numpy>=2 -# Mac x86 only supports 2.2.2 +# Drop Mac x86 support # https://discuss.pytorch.org/t/why-no-macosx-x86-64-build-after-torch-2-2-2-cp39-none-macosx-10-9-x86-64-whl/204546/2 -torch==2.2.2 +torch>2.2.2 -# Later versions break test_help in GitHub Actions on Windows and Ubuntu -llama-index-core==0.12.26 \ No newline at end of file +# Some llama-index-core versions > 0.12.26 broke test_help in GitHub Actions on Windows and Ubuntu +llama-index-core>=0.12.31 diff --git a/requirements/requirements-help.txt b/requirements/requirements-help.txt index 2559b273f..c00c83314 100644 --- a/requirements/requirements-help.txt +++ b/requirements/requirements-help.txt @@ -13,6 +13,10 @@ aiosignal==1.3.2 # via # -c requirements/common-constraints.txt # aiohttp +aiosqlite==0.21.0 + # via + # -c requirements/common-constraints.txt + # llama-index-core annotated-types==0.7.0 # via # -c requirements/common-constraints.txt @@ -93,10 +97,6 @@ h11==0.16.0 # via # -c requirements/common-constraints.txt # httpcore -hf-xet==1.1.0 - # via - # -c requirements/common-constraints.txt - # huggingface-hub httpcore==1.0.9 # via # -c requirements/common-constraints.txt @@ -105,7 +105,7 @@ httpx==0.28.1 # via # -c requirements/common-constraints.txt # llama-index-core -huggingface-hub[inference]==0.31.1 +huggingface-hub[inference]==0.31.2 # via # -c requirements/common-constraints.txt # llama-index-embeddings-huggingface @@ -129,12 +129,12 @@ joblib==1.5.0 # -c requirements/common-constraints.txt # nltk # scikit-learn -llama-index-core==0.12.26 +llama-index-core==0.12.35 # via # -c requirements/common-constraints.txt # -r requirements/requirements-help.in # llama-index-embeddings-huggingface -llama-index-embeddings-huggingface==0.5.3 +llama-index-embeddings-huggingface==0.5.4 # via # -c requirements/common-constraints.txt # -r requirements/requirements-help.in @@ -172,7 +172,7 @@ nltk==3.9.1 # via # -c requirements/common-constraints.txt # llama-index-core -numpy==1.26.4 +numpy==2.2.5 # via # -c requirements/common-constraints.txt # -r requirements/requirements-help.in @@ -245,11 +245,15 @@ sentence-transformers==4.1.0 # via # -c requirements/common-constraints.txt # llama-index-embeddings-huggingface +setuptools==80.4.0 + # via + # -c requirements/common-constraints.txt + # torch sniffio==1.3.1 # via # -c requirements/common-constraints.txt # anyio -sqlalchemy[asyncio]==2.0.40 +sqlalchemy[asyncio]==2.0.41 # via # -c requirements/common-constraints.txt # llama-index-core @@ -273,7 +277,7 @@ tokenizers==0.21.1 # via # -c requirements/common-constraints.txt # transformers -torch==2.2.2 +torch==2.7.0 # via # -c requirements/common-constraints.txt # -r requirements/requirements-help.in @@ -293,7 +297,7 @@ transformers==4.51.3 typing-extensions==4.13.2 # via # -c requirements/common-constraints.txt - # anyio + # aiosqlite # huggingface-hub # llama-index-core # pydantic diff --git a/requirements/tree-sitter.in b/requirements/tree-sitter.in index eba2e6770..32c5c8159 100644 --- a/requirements/tree-sitter.in +++ b/requirements/tree-sitter.in @@ -1,3 +1 @@ - -tree-sitter==0.23.2; python_version < "3.10" -tree-sitter==0.24.0; python_version >= "3.10" +tree-sitter>=0.24.0 diff --git a/scripts/pip-compile.sh b/scripts/pip-compile.sh index e1e1e512b..464f0ce34 100755 --- a/scripts/pip-compile.sh +++ b/scripts/pip-compile.sh @@ -6,8 +6,11 @@ set -e # Add verbosity flag to see more details about dependency resolution VERBOSITY="-v" # Use -v for less detail, -vvv for even more detail +# Attention: uv doesn't update to minor releases when output-file exists! + # First compile the common constraints of the full requirement suite # to make sure that all versions are mutually consistent across files +rm requirements/common-constraints.txt uv pip compile \ $VERBOSITY \ --no-strip-extras \ @@ -17,6 +20,7 @@ uv pip compile \ $1 # Compile the base requirements +rm tmp.requirements.txt uv pip compile \ $VERBOSITY \ --no-strip-extras \ @@ -25,14 +29,17 @@ uv pip compile \ requirements/requirements.in \ $1 -grep -v ^tree-sitter= tmp.requirements.txt \ - | cat - requirements/tree-sitter.in \ - > requirements.txt +{ + grep -v ^tree-sitter= tmp.requirements.txt + echo; cat requirements/tree-sitter.in + echo; cat requirements/pydub.in +} > requirements.txt # Compile additional requirements files SUFFIXES=(dev help browser playwright) for SUFFIX in "${SUFFIXES[@]}"; do + rm requirements/requirements-${SUFFIX}.txt uv pip compile \ $VERBOSITY \ --no-strip-extras \