Merge branch 'main' into mixpanel

This commit is contained in:
Paul Gauthier 2024-08-13 09:52:50 -07:00
commit 4d04a35e73
10 changed files with 121 additions and 84 deletions

View file

@ -21,12 +21,12 @@ jobs:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools wheel twine importlib-metadata==7.2.1
pip install build setuptools wheel twine importlib-metadata==7.2.1
- name: Build and publish
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
run: |
python setup.py sdist bdist_wheel
python -m build
twine upload dist/*

1
.gitignore vendored
View file

@ -5,6 +5,7 @@ aider.code-workspace
.aider*
aider_chat.egg-info/
build
dist/
Gemfile.lock
_site
.jekyll-cache/

View file

@ -11,6 +11,7 @@
- Web scraper is more robust if page never idles.
- Improved token and cost reporting for infinite output.
- Improvements and bug fixes for `/read` only files.
- Switched from `setup.py` to `pyproject.toml`, by @branchvincent.
- Bug fix to persist files added during `/ask`.
- Bug fix for chat history size in `/tokens`.

View file

@ -1 +0,0 @@
include requirements.txt

View file

@ -3,6 +3,7 @@ import importlib
import json
import math
import os
import platform
import sys
from dataclasses import dataclass, fields
from pathlib import Path
@ -674,6 +675,13 @@ def sanity_check_model(io, model):
io.tool_error(f"Model {model}: Missing these environment variables:")
for key in model.missing_keys:
io.tool_error(f"- {key}")
if platform.system() == "Windows" or True:
io.tool_output(
"If you just set these environment variables using `setx` you may need to restart"
" your terminal or command prompt for the changes to take effect."
)
elif not model.keys_in_environment:
show = True
io.tool_output(f"Model {model}: Unknown which environment variables are required.")

View file

@ -26,6 +26,7 @@ cog.out(text)
- Web scraper is more robust if page never idles.
- Improved token and cost reporting for infinite output.
- Improvements and bug fixes for `/read` only files.
- Switched from `setup.py` to `pyproject.toml`, by @branchvincent.
- Bug fix to persist files added during `/ask`.
- Bug fix for chat history size in `/tokens`.

View file

@ -44,6 +44,10 @@ Model azure/gpt-4-turbo: Missing these environment variables:
- AZURE_API_KEY
```
{: .tip }
On Windows,
if you just set these environment variables using `setx` you may need to restart your terminal or
command prompt for the changes to take effect.
## Unknown which environment variables are required

67
pyproject.toml Normal file
View file

@ -0,0 +1,67 @@
# [[[cog
# from aider.help_pats import exclude_website_pats
# ]]]
# [[[end]]]
[project]
name = "aider-chat"
description = "Aider is AI pair programming in your terminal"
readme = "README.md"
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Console",
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python",
"Topic :: Software Development",
]
requires-python = ">=3.9,<3.13"
dynamic = ["dependencies", "optional-dependencies", "version"]
[project.urls]
Homepage = "https://github.com/paul-gauthier/aider"
[project.scripts]
aider = "aider.main:main"
[tool.setuptools.dynamic]
version = { attr = "aider.__init__.__version__" }
dependencies = { file = "requirements.txt" }
[tool.setuptools.dynamic.optional-dependencies]
dev = { file = "requirements/requirements-dev.txt" }
help = { file = "requirements/requirements-help.txt" }
browser = { file = "requirements/requirements-browser.txt" }
playwright = { file = "requirements/requirements-playwright.txt" }
[tool.setuptools.packages.find]
include = ["aider*", "aider.website"]
[tool.setuptools.package-data]
"aider" = ["queries/*.scm"]
"aider.website" = ["**/*.md"]
[tool.setuptools.exclude-package-data]
"aider.website" = [
# [[[cog
# cog.out("\n".join(f' "{pat}",' for pat in exclude_website_pats))
# ]]]
"examples/**",
"_posts/**",
"HISTORY.md",
"docs/benchmarks*md",
"docs/ctags.md",
"docs/unified-diffs.md",
"docs/leaderboards/index.md",
"assets/**",
# [[[end]]]
]
[build-system]
requires = ["setuptools>=68"]
build-backend = "setuptools.build_meta"

View file

@ -9,22 +9,36 @@ import sys
from packaging import version
def check_cog_pyproject():
result = subprocess.run(["cog", "--check", "pyproject.toml"], capture_output=True, text=True)
if result.returncode != 0:
print("Error: cog --check pyproject.toml failed, updating.")
subprocess.run(["cog", "-r", "pyproject.toml"])
sys.exit(1)
def main():
parser = argparse.ArgumentParser(description="Bump version")
parser.add_argument("new_version", help="New version in x.y.z format")
parser.add_argument(
"--dry-run", action="store_true", help="Print each step without actually executing them"
)
# Function to check if we are on the main branch
def check_branch():
branch = subprocess.run(["git", "rev-parse", "--abbrev-ref", "HEAD"], capture_output=True, text=True).stdout.strip()
branch = subprocess.run(
["git", "rev-parse", "--abbrev-ref", "HEAD"], capture_output=True, text=True
).stdout.strip()
if branch != "main":
print("Error: Not on the main branch.")
sys.exit(1)
# Function to check if the working directory is clean
def check_working_directory_clean():
status = subprocess.run(["git", "status", "--porcelain"], capture_output=True, text=True).stdout
status = subprocess.run(
["git", "status", "--porcelain"], capture_output=True, text=True
).stdout
if status:
print("Error: Working directory is not clean.")
sys.exit(1)
@ -32,19 +46,33 @@ def main():
# Function to fetch the latest changes and check if the main branch is up to date
def check_main_branch_up_to_date():
subprocess.run(["git", "fetch", "origin"], check=True)
local_main = subprocess.run(["git", "rev-parse", "main"], capture_output=True, text=True).stdout.strip()
local_main = subprocess.run(
["git", "rev-parse", "main"], capture_output=True, text=True
).stdout.strip()
print(f"Local main commit hash: {local_main}")
origin_main = subprocess.run(["git", "rev-parse", "origin/main"], capture_output=True, text=True).stdout.strip()
origin_main = subprocess.run(
["git", "rev-parse", "origin/main"], capture_output=True, text=True
).stdout.strip()
print(f"Origin main commit hash: {origin_main}")
if local_main != origin_main:
local_date = subprocess.run(["git", "show", "-s", "--format=%ci", "main"], capture_output=True, text=True).stdout.strip()
origin_date = subprocess.run(["git", "show", "-s", "--format=%ci", "origin/main"], capture_output=True, text=True).stdout.strip()
local_date = subprocess.run(
["git", "show", "-s", "--format=%ci", "main"], capture_output=True, text=True
).stdout.strip()
origin_date = subprocess.run(
["git", "show", "-s", "--format=%ci", "origin/main"], capture_output=True, text=True
).stdout.strip()
local_date = datetime.datetime.strptime(local_date, "%Y-%m-%d %H:%M:%S %z")
origin_date = datetime.datetime.strptime(origin_date, "%Y-%m-%d %H:%M:%S %z")
if local_date < origin_date:
print("Error: The local main branch is behind origin/main. Please pull the latest changes.")
print(
"Error: The local main branch is behind origin/main. Please pull the latest"
" changes."
)
elif local_date > origin_date:
print("Error: The origin/main branch is behind the local main branch. Please push your changes.")
print(
"Error: The origin/main branch is behind the local main branch. Please push"
" your changes."
)
else:
print("Error: The main branch and origin/main have diverged.")
sys.exit(1)
@ -53,6 +81,7 @@ def main():
dry_run = args.dry_run
# Perform checks before proceeding
check_cog_pyproject()
check_branch()
check_working_directory_clean()
check_main_branch_up_to_date()

View file

@ -1,73 +0,0 @@
import re
from pathlib import Path
from setuptools import find_packages, setup
from aider import __version__
from aider.help_pats import exclude_website_pats
def get_requirements(suffix=""):
if suffix:
fname = "requirements-" + suffix + ".txt"
fname = Path("requirements") / fname
else:
fname = Path("requirements.txt")
requirements = fname.read_text().splitlines()
return requirements
requirements = get_requirements()
# README
with open("README.md", "r", encoding="utf-8") as f:
long_description = f.read()
long_description = re.sub(r"\n!\[.*\]\(.*\)", "", long_description)
# long_description = re.sub(r"\n- \[.*\]\(.*\)", "", long_description)
# Discover packages, plus the website
packages = find_packages(exclude=["benchmark", "tests"])
packages += ["aider.website"]
print("Packages:", packages)
extras = "dev help browser playwright".split()
setup(
name="aider-chat",
version=__version__,
packages=packages,
include_package_data=True,
package_data={
"aider": ["queries/*.scm"],
"aider.website": ["**/*.md"],
},
exclude_package_data={"aider.website": exclude_website_pats},
install_requires=requirements,
extras_require={extra: get_requirements(extra) for extra in extras},
python_requires=">=3.9,<3.13",
entry_points={
"console_scripts": [
"aider = aider.main:main",
],
},
description="Aider is AI pair programming in your terminal",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/paul-gauthier/aider",
classifiers=[
"Development Status :: 4 - Beta",
"Environment :: Console",
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python",
"Topic :: Software Development",
],
)