From cfa1c6c7560ec01632026f6cf4c17c97d26b7422 Mon Sep 17 00:00:00 2001 From: youknow Date: Sat, 13 Jul 2024 02:00:27 +0900 Subject: [PATCH 01/15] add gamme2-27b-q8 benchmark result --- aider/website/_data/edit_leaderboard.yml | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/aider/website/_data/edit_leaderboard.yml b/aider/website/_data/edit_leaderboard.yml index dacc0aa40..29b7ee269 100644 --- a/aider/website/_data/edit_leaderboard.yml +++ b/aider/website/_data/edit_leaderboard.yml @@ -681,4 +681,26 @@ versions: 0.41.1-dev seconds_per_case: 7.1 total_cost: 0.1946 - \ No newline at end of file + + - dirname: 2024-07-09-10-12-27--gemma2:27b-instruct-q8_0 + test_cases: 133 + model: gemma2:27b-instruct-q8_0 + edit_format: whole + commit_hash: f9d96ac-dirty + pass_rate_1: 31.6 + pass_rate_2: 36.1 + percent_cases_well_formed: 100.0 + error_outputs: 35 + num_malformed_responses: 0 + num_with_malformed_responses: 0 + user_asks: 35 + lazy_comments: 2 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + test_timeouts: 3 + command: aider --model ollama/gemma2:27b-instruct-q8_0 + date: 2024-07-09 + versions: 0.43.0 + seconds_per_case: 101.3 + total_cost: 0.0000 \ No newline at end of file From 88749a8acb51e55e9ee4839997d093458edef97c Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sat, 13 Jul 2024 07:51:12 +0100 Subject: [PATCH 02/15] moved versioncheck touch into finally --- aider/versioncheck.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/aider/versioncheck.py b/aider/versioncheck.py index ac8f647fd..c0133f582 100644 --- a/aider/versioncheck.py +++ b/aider/versioncheck.py @@ -29,9 +29,9 @@ def check_version(io, just_check=False): except Exception as err: io.tool_error(f"Error checking pypi for new version: {err}") return False - - fname.parent.mkdir(parents=True, exist_ok=True) - fname.touch() + finally: + fname.parent.mkdir(parents=True, exist_ok=True) + fname.touch() if just_check: return is_update_available From c598cdd5765fbceb20504f476e4ad6a01615ddfa Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sat, 13 Jul 2024 07:57:12 +0100 Subject: [PATCH 03/15] Catch self.sd.PortAudioError gracefully #849 --- aider/voice.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/aider/voice.py b/aider/voice.py index 46568e8e8..d333c85e7 100644 --- a/aider/voice.py +++ b/aider/voice.py @@ -85,8 +85,12 @@ class Voice: self.start_time = time.time() - with self.sd.InputStream(samplerate=sample_rate, channels=1, callback=self.callback): - prompt(self.get_prompt, refresh_interval=0.1) + try: + with self.sd.InputStream(samplerate=sample_rate, channels=1, callback=self.callback): + prompt(self.get_prompt, refresh_interval=0.1) + except self.sd.PortAudioError as err: + print(err) + return with sf.SoundFile(filename, mode="x", samplerate=sample_rate, channels=1) as file: while not self.q.empty(): From 80daa942f3fb3f5ea0a4519a9581167d5e24314b Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sat, 13 Jul 2024 07:57:27 +0100 Subject: [PATCH 04/15] copy --- aider/website/assets/sample.aider.conf.yml | 6 +++--- aider/website/assets/sample.env | 6 +++--- aider/website/docs/config/aider_conf.md | 6 +++--- aider/website/docs/config/dotenv.md | 6 +++--- aider/website/docs/config/options.md | 24 +++++++++++++--------- 5 files changed, 26 insertions(+), 22 deletions(-) diff --git a/aider/website/assets/sample.aider.conf.yml b/aider/website/assets/sample.aider.conf.yml index e5bc4ca95..24d525b32 100644 --- a/aider/website/assets/sample.aider.conf.yml +++ b/aider/website/assets/sample.aider.conf.yml @@ -207,10 +207,10 @@ #version: ## Check for updates and return status in the exit code -#check-update: false +#just-check-update: false -## Skips checking for the update when the program runs -#skip-check-update: false +## Check for new aider versions on launch +#check-update: true ## Apply the changes from the given file instead of running the chat (debug) #apply: diff --git a/aider/website/assets/sample.env b/aider/website/assets/sample.env index f18c917e1..d1313b931 100644 --- a/aider/website/assets/sample.env +++ b/aider/website/assets/sample.env @@ -208,10 +208,10 @@ #AIDER_VOICE_LANGUAGE=en ## Check for updates and return status in the exit code -#AIDER_CHECK_UPDATE=false +#AIDER_JUST_CHECK_UPDATE=false -## Skips checking for the update when the program runs -#AIDER_SKIP_CHECK_UPDATE=false +## Check for new aider versions on launch +#AIDER_CHECK_UPDATE=true ## Apply the changes from the given file instead of running the chat (debug) #AIDER_APPLY= diff --git a/aider/website/docs/config/aider_conf.md b/aider/website/docs/config/aider_conf.md index f7ebce607..3c7145560 100644 --- a/aider/website/docs/config/aider_conf.md +++ b/aider/website/docs/config/aider_conf.md @@ -246,10 +246,10 @@ cog.outl("```") #version: ## Check for updates and return status in the exit code -#check-update: false +#just-check-update: false -## Skips checking for the update when the program runs -#skip-check-update: false +## Check for new aider versions on launch +#check-update: true ## Apply the changes from the given file instead of running the chat (debug) #apply: diff --git a/aider/website/docs/config/dotenv.md b/aider/website/docs/config/dotenv.md index df54fd608..932dcb767 100644 --- a/aider/website/docs/config/dotenv.md +++ b/aider/website/docs/config/dotenv.md @@ -250,10 +250,10 @@ cog.outl("```") #AIDER_VOICE_LANGUAGE=en ## Check for updates and return status in the exit code -#AIDER_CHECK_UPDATE=false +#AIDER_JUST_CHECK_UPDATE=false -## Skips checking for the update when the program runs -#AIDER_SKIP_CHECK_UPDATE=false +## Check for new aider versions on launch +#AIDER_CHECK_UPDATE=true ## Apply the changes from the given file instead of running the chat (debug) #AIDER_APPLY= diff --git a/aider/website/docs/config/options.md b/aider/website/docs/config/options.md index 4a3aeed2b..211681488 100644 --- a/aider/website/docs/config/options.md +++ b/aider/website/docs/config/options.md @@ -51,10 +51,11 @@ usage: aider [-h] [--openai-api-key] [--anthropic-api-key] [--model] [--dry-run | --no-dry-run] [--commit] [--lint] [--lint-cmd] [--auto-lint | --no-auto-lint] [--test-cmd] [--auto-test | --no-auto-test] [--test] - [--vim] [--voice-language] [--version] [--check-update] - [--skip-check-update] [--apply] [--yes] [-v] - [--show-repo-map] [--show-prompts] [--exit] [--message] - [--message-file] [--encoding] [-c] [--gui] + [--vim] [--voice-language] [--version] + [--just-check-update] + [--check-update | --no-check-update] [--apply] [--yes] + [-v] [--show-repo-map] [--show-prompts] [--exit] + [--message] [--message-file] [--encoding] [-c] [--gui] ``` @@ -396,15 +397,18 @@ Environment variable: `AIDER_VOICE_LANGUAGE` ### `--version` Show the version number and exit -### `--check-update` +### `--just-check-update` Check for updates and return status in the exit code Default: False -Environment variable: `AIDER_CHECK_UPDATE` +Environment variable: `AIDER_JUST_CHECK_UPDATE` -### `--skip-check-update` -Skips checking for the update when the program runs -Default: False -Environment variable: `AIDER_SKIP_CHECK_UPDATE` +### `--check-update` +Check for new aider versions on launch +Default: True +Environment variable: `AIDER_CHECK_UPDATE` +Aliases: + - `--check-update` + - `--no-check-update` ### `--apply FILE` Apply the changes from the given file instead of running the chat (debug) From 82a59416d40c88edb92d89105225864344ffc02a Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sat, 13 Jul 2024 08:55:44 +0100 Subject: [PATCH 05/15] clarified the networkx/scipy deps --- requirements-dev.txt | 2 +- requirements.in | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index fa026f57d..92f5833d2 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -45,7 +45,7 @@ filelock==3.15.4 # via # -c requirements.txt # virtualenv -fonttools==4.53.0 +fonttools==4.53.1 # via matplotlib identify==2.5.36 # via pre-commit diff --git a/requirements.in b/requirements.in index c093c977d..0dc1f21e0 100644 --- a/requirements.in +++ b/requirements.in @@ -28,9 +28,19 @@ watchdog flake8 importlib_resources -# v3.3 no longer works on python 3.9 +# The proper depdendency is networkx[default], but this brings +# in matplotlib and a bunch of other deps +# https://github.com/networkx/networkx/blob/d7132daa8588f653eacac7a5bae1ee85a183fa43/pyproject.toml#L57 +# We really only need networkx itself and scipy for the repomap. +# Pin below v3.3 to retain python 3.9 compatibility. networkx<3.3 +# This is the one networkx dependency that we need. +# Including it here explicitly because we +# didn't specify networkx[default] above. +# Pin below 1.14 to retain python 3.9 compatibility. +scipy<1.14 + # v0.22.2 seems to break tree-sitter-languages? tree-sitter==0.21.3 @@ -39,5 +49,3 @@ tree-sitter==0.21.3 # Uses importlib-metadata importlib-metadata<8.0.0 -# To retain python 3.9 compatibility -scipy<1.14 From bafa8ab71c64839f120988147b29e309869f2878 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sat, 13 Jul 2024 16:36:41 +0100 Subject: [PATCH 06/15] refactor reqs into requirements/ --- requirements.txt | 60 ++++++------ .../requirements-dev.in | 2 +- .../requirements-dev.txt | 68 ++++++------- .../requirements-hf-embed.in | 2 +- .../requirements-hf-embed.txt | 96 +++++++++---------- .../requirements.in | 0 scripts/pip-compile.sh | 15 ++- setup.py | 16 +++- 8 files changed, 137 insertions(+), 122 deletions(-) rename requirements-dev.in => requirements/requirements-dev.in (87%) rename requirements-dev.txt => requirements/requirements-dev.txt (65%) rename requirements-hf-embed.in => requirements/requirements-hf-embed.in (85%) rename requirements-hf-embed.txt => requirements/requirements-hf-embed.txt (66%) rename requirements.in => requirements/requirements.in (100%) diff --git a/requirements.txt b/requirements.txt index b6ec9f810..8176e9cf2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile requirements.in +# pip-compile --output-file=requirements.txt requirements/requirements.in # aiohttp==3.9.5 # via litellm @@ -22,9 +22,9 @@ attrs==23.2.0 # jsonschema # referencing backoff==2.2.1 - # via -r requirements.in + # via -r requirements/requirements.in beautifulsoup4==4.12.3 - # via -r requirements.in + # via -r requirements/requirements.in blinker==1.8.2 # via streamlit cachetools==5.3.3 @@ -47,17 +47,17 @@ click==8.1.7 # litellm # streamlit configargparse==1.7 - # via -r requirements.in + # via -r requirements/requirements.in diff-match-patch==20230430 - # via -r requirements.in + # via -r requirements/requirements.in diskcache==5.6.3 - # via -r requirements.in + # via -r requirements/requirements.in distro==1.9.0 # via openai filelock==3.15.4 # via huggingface-hub flake8==7.1.0 - # via -r requirements.in + # via -r requirements/requirements.in frozenlist==1.4.1 # via # aiohttp @@ -68,7 +68,7 @@ gitdb==4.0.11 # via gitpython gitpython==3.1.43 # via - # -r requirements.in + # -r requirements/requirements.in # streamlit google-ai-generativelanguage==0.6.6 # via google-generativeai @@ -89,7 +89,7 @@ google-auth==2.31.0 google-auth-httplib2==0.2.0 # via google-api-python-client google-generativeai==0.7.1 - # via -r requirements.in + # via -r requirements/requirements.in googleapis-common-protos==1.63.2 # via # google-api-core @@ -97,7 +97,7 @@ googleapis-common-protos==1.63.2 greenlet==3.0.3 # via playwright grep-ast==0.3.2 - # via -r requirements.in + # via -r requirements/requirements.in grpcio==1.64.1 # via # google-api-core @@ -124,10 +124,10 @@ idna==3.7 # yarl importlib-metadata==7.2.1 # via - # -r requirements.in + # -r requirements/requirements.in # litellm importlib-resources==6.4.0 - # via -r requirements.in + # via -r requirements/requirements.in jinja2==3.1.4 # via # altair @@ -135,13 +135,13 @@ jinja2==3.1.4 # pydeck jsonschema==4.22.0 # via - # -r requirements.in + # -r requirements/requirements.in # altair # litellm jsonschema-specifications==2023.12.1 # via jsonschema litellm==1.41.6 - # via -r requirements.in + # via -r requirements/requirements.in markdown-it-py==3.0.0 # via rich markupsafe==2.1.5 @@ -155,10 +155,10 @@ multidict==6.0.5 # aiohttp # yarl networkx==3.2.1 - # via -r requirements.in + # via -r requirements/requirements.in numpy==1.26.4 # via - # -r requirements.in + # -r requirements/requirements.in # altair # pandas # pyarrow @@ -169,7 +169,7 @@ openai==1.35.10 # via litellm packaging==24.1 # via - # -r requirements.in + # -r requirements/requirements.in # altair # huggingface-hub # streamlit @@ -179,16 +179,16 @@ pandas==2.2.2 # streamlit pathspec==0.12.1 # via - # -r requirements.in + # -r requirements/requirements.in # grep-ast pillow==10.4.0 # via - # -r requirements.in + # -r requirements/requirements.in # streamlit playwright==1.45.0 - # via -r requirements.in + # via -r requirements/requirements.in prompt-toolkit==3.0.47 - # via -r requirements.in + # via -r requirements/requirements.in proto-plus==1.24.0 # via # google-ai-generativelanguage @@ -230,7 +230,7 @@ pyflakes==3.2.0 pygments==2.18.0 # via rich pypandoc==1.13 - # via -r requirements.in + # via -r requirements/requirements.in pyparsing==3.1.2 # via httplib2 python-dateutil==2.9.0.post0 @@ -241,7 +241,7 @@ pytz==2024.1 # via pandas pyyaml==6.0.1 # via - # -r requirements.in + # -r requirements/requirements.in # huggingface-hub referencing==0.35.1 # via @@ -258,7 +258,7 @@ requests==2.32.3 # tiktoken rich==13.7.1 # via - # -r requirements.in + # -r requirements/requirements.in # streamlit rpds-py==0.18.1 # via @@ -267,7 +267,7 @@ rpds-py==0.18.1 rsa==4.9 # via google-auth scipy==1.13.1 - # via -r requirements.in + # via -r requirements/requirements.in six==1.16.0 # via python-dateutil smmap==5.0.1 @@ -278,13 +278,13 @@ sniffio==1.3.1 # httpx # openai sounddevice==0.4.7 - # via -r requirements.in + # via -r requirements/requirements.in soundfile==0.12.1 - # via -r requirements.in + # via -r requirements/requirements.in soupsieve==2.5 # via beautifulsoup4 streamlit==1.36.0 - # via -r requirements.in + # via -r requirements/requirements.in tenacity==8.4.2 # via streamlit tiktoken==0.7.0 @@ -304,7 +304,7 @@ tqdm==4.66.4 # openai tree-sitter==0.21.3 # via - # -r requirements.in + # -r requirements/requirements.in # tree-sitter-languages tree-sitter-languages==1.10.2 # via grep-ast @@ -324,7 +324,7 @@ uritemplate==4.1.1 urllib3==2.2.2 # via requests watchdog==4.0.1 - # via -r requirements.in + # via -r requirements/requirements.in wcwidth==0.2.13 # via prompt-toolkit yarl==1.9.4 diff --git a/requirements-dev.in b/requirements/requirements-dev.in similarity index 87% rename from requirements-dev.in rename to requirements/requirements-dev.in index f1d040cd2..f2c3badfe 100644 --- a/requirements-dev.in +++ b/requirements/requirements-dev.in @@ -1,4 +1,4 @@ --c requirements.txt +-c ../requirements.txt # # pip-compile --output-file=requirements-dev.txt requirements-dev.in --upgrade # diff --git a/requirements-dev.txt b/requirements/requirements-dev.txt similarity index 65% rename from requirements-dev.txt rename to requirements/requirements-dev.txt index 92f5833d2..4c74677fb 100644 --- a/requirements-dev.txt +++ b/requirements/requirements-dev.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --output-file=requirements-dev.txt requirements-dev.in +# pip-compile --output-file=requirements/requirements-dev.txt requirements/requirements-dev.in # alabaster==0.7.16 # via sphinx @@ -12,21 +12,21 @@ build==1.2.1 # via pip-tools certifi==2024.7.4 # via - # -c requirements.txt + # -c requirements/../requirements.txt # requests cfgv==3.4.0 # via pre-commit charset-normalizer==3.3.2 # via - # -c requirements.txt + # -c requirements/../requirements.txt # requests click==8.1.7 # via - # -c requirements.txt + # -c requirements/../requirements.txt # pip-tools # typer cogapp==3.4.1 - # via -r requirements-dev.in + # via -r requirements/requirements-dev.in contourpy==1.2.1 # via matplotlib cycler==0.12.1 @@ -43,7 +43,7 @@ docutils==0.20.1 # sphinx-rtd-theme filelock==3.15.4 # via - # -c requirements.txt + # -c requirements/../requirements.txt # virtualenv fonttools==4.53.1 # via matplotlib @@ -51,35 +51,35 @@ identify==2.5.36 # via pre-commit idna==3.7 # via - # -c requirements.txt + # -c requirements/../requirements.txt # requests imagesize==1.4.1 # via sphinx imgcat==0.5.0 - # via -r requirements-dev.in + # via -r requirements/requirements-dev.in iniconfig==2.0.0 # via pytest jinja2==3.1.4 # via - # -c requirements.txt + # -c requirements/../requirements.txt # sphinx kiwisolver==1.4.5 # via matplotlib lox==0.12.0 - # via -r requirements-dev.in + # via -r requirements/requirements-dev.in markdown-it-py==3.0.0 # via - # -c requirements.txt + # -c requirements/../requirements.txt # rich markupsafe==2.1.5 # via - # -c requirements.txt + # -c requirements/../requirements.txt # jinja2 matplotlib==3.9.1 - # via -r requirements-dev.in + # via -r requirements/requirements-dev.in mdurl==0.1.2 # via - # -c requirements.txt + # -c requirements/../requirements.txt # markdown-it-py multiprocess==0.70.16 # via pathos @@ -87,29 +87,29 @@ nodeenv==1.9.1 # via pre-commit numpy==1.26.4 # via - # -c requirements.txt + # -c requirements/../requirements.txt # contourpy # matplotlib # pandas packaging==24.1 # via - # -c requirements.txt + # -c requirements/../requirements.txt # build # matplotlib # pytest # sphinx pandas==2.2.2 # via - # -c requirements.txt - # -r requirements-dev.in + # -c requirements/../requirements.txt + # -r requirements/requirements-dev.in pathos==0.3.2 # via lox pillow==10.4.0 # via - # -c requirements.txt + # -c requirements/../requirements.txt # matplotlib pip-tools==7.4.1 - # via -r requirements-dev.in + # via -r requirements/requirements-dev.in platformdirs==4.2.2 # via virtualenv pluggy==1.5.0 @@ -119,48 +119,48 @@ pox==0.3.4 ppft==1.7.6.8 # via pathos pre-commit==3.7.1 - # via -r requirements-dev.in + # via -r requirements/requirements-dev.in pygments==2.18.0 # via - # -c requirements.txt + # -c requirements/../requirements.txt # rich # sphinx pyparsing==3.1.2 # via - # -c requirements.txt + # -c requirements/../requirements.txt # matplotlib pyproject-hooks==1.1.0 # via # build # pip-tools pytest==8.2.2 - # via -r requirements-dev.in + # via -r requirements/requirements-dev.in python-dateutil==2.9.0.post0 # via - # -c requirements.txt + # -c requirements/../requirements.txt # matplotlib # pandas pytz==2024.1 # via - # -c requirements.txt + # -c requirements/../requirements.txt # pandas pyyaml==6.0.1 # via - # -c requirements.txt + # -c requirements/../requirements.txt # pre-commit requests==2.32.3 # via - # -c requirements.txt + # -c requirements/../requirements.txt # sphinx rich==13.7.1 # via - # -c requirements.txt + # -c requirements/../requirements.txt # typer shellingham==1.5.4 # via typer six==1.16.0 # via - # -c requirements.txt + # -c requirements/../requirements.txt # python-dateutil snowballstemmer==2.2.0 # via sphinx @@ -185,18 +185,18 @@ sphinxcontrib-qthelp==1.0.7 sphinxcontrib-serializinghtml==1.1.10 # via sphinx typer==0.12.3 - # via -r requirements-dev.in + # via -r requirements/requirements-dev.in typing-extensions==4.12.2 # via - # -c requirements.txt + # -c requirements/../requirements.txt # typer tzdata==2024.1 # via - # -c requirements.txt + # -c requirements/../requirements.txt # pandas urllib3==2.2.2 # via - # -c requirements.txt + # -c requirements/../requirements.txt # requests virtualenv==20.26.3 # via pre-commit diff --git a/requirements-hf-embed.in b/requirements/requirements-hf-embed.in similarity index 85% rename from requirements-hf-embed.in rename to requirements/requirements-hf-embed.in index 38df32543..8b10df15f 100644 --- a/requirements-hf-embed.in +++ b/requirements/requirements-hf-embed.in @@ -1,4 +1,4 @@ --c requirements.txt +-c ../requirements.txt # # pip-compile --output-file=requirements-hf.txt requirements-hf.in --upgrade # diff --git a/requirements-hf-embed.txt b/requirements/requirements-hf-embed.txt similarity index 66% rename from requirements-hf-embed.txt rename to requirements/requirements-hf-embed.txt index 257941b83..6911de143 100644 --- a/requirements-hf-embed.txt +++ b/requirements/requirements-hf-embed.txt @@ -2,43 +2,43 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --output-file=requirements-hf-embed.txt requirements-hf-embed.in +# pip-compile --output-file=requirements/requirements-hf-embed.txt requirements/requirements-hf-embed.in # aiohttp==3.9.5 # via - # -c requirements.txt + # -c requirements/../requirements.txt # huggingface-hub # llama-index-core aiosignal==1.3.1 # via - # -c requirements.txt + # -c requirements/../requirements.txt # aiohttp annotated-types==0.7.0 # via - # -c requirements.txt + # -c requirements/../requirements.txt # pydantic anyio==4.4.0 # via - # -c requirements.txt + # -c requirements/../requirements.txt # httpx # openai attrs==23.2.0 # via - # -c requirements.txt + # -c requirements/../requirements.txt # aiohttp certifi==2024.7.4 # via - # -c requirements.txt + # -c requirements/../requirements.txt # httpcore # httpx # requests charset-normalizer==3.3.2 # via - # -c requirements.txt + # -c requirements/../requirements.txt # requests click==8.1.7 # via - # -c requirements.txt + # -c requirements/../requirements.txt # nltk dataclasses-json==0.6.7 # via llama-index-core @@ -48,60 +48,60 @@ dirtyjson==1.0.8 # via llama-index-core distro==1.9.0 # via - # -c requirements.txt + # -c requirements/../requirements.txt # openai filelock==3.15.4 # via - # -c requirements.txt + # -c requirements/../requirements.txt # huggingface-hub # torch # transformers frozenlist==1.4.1 # via - # -c requirements.txt + # -c requirements/../requirements.txt # aiohttp # aiosignal fsspec==2024.6.1 # via - # -c requirements.txt + # -c requirements/../requirements.txt # huggingface-hub # llama-index-core # torch greenlet==3.0.3 # via - # -c requirements.txt + # -c requirements/../requirements.txt # sqlalchemy h11==0.14.0 # via - # -c requirements.txt + # -c requirements/../requirements.txt # httpcore httpcore==1.0.5 # via - # -c requirements.txt + # -c requirements/../requirements.txt # httpx httpx==0.27.0 # via - # -c requirements.txt + # -c requirements/../requirements.txt # llama-cloud # llama-index-core # openai huggingface-hub[inference]==0.23.4 # via - # -c requirements.txt + # -c requirements/../requirements.txt # llama-index-embeddings-huggingface # sentence-transformers # tokenizers # transformers idna==3.7 # via - # -c requirements.txt + # -c requirements/../requirements.txt # anyio # httpx # requests # yarl jinja2==3.1.4 # via - # -c requirements.txt + # -c requirements/../requirements.txt # torch joblib==1.4.2 # via @@ -111,13 +111,13 @@ llama-cloud==0.0.6 # via llama-index-core llama-index-core==0.10.52.post2 # via - # -r requirements-hf-embed.in + # -r requirements/requirements-hf-embed.in # llama-index-embeddings-huggingface llama-index-embeddings-huggingface==0.2.2 - # via -r requirements-hf-embed.in + # via -r requirements/requirements-hf-embed.in markupsafe==2.1.5 # via - # -c requirements.txt + # -c requirements/../requirements.txt # jinja2 marshmallow==3.21.3 # via dataclasses-json @@ -127,7 +127,7 @@ mpmath==1.3.0 # via sympy multidict==6.0.5 # via - # -c requirements.txt + # -c requirements/../requirements.txt # aiohttp # yarl mypy-extensions==1.0.0 @@ -136,14 +136,14 @@ nest-asyncio==1.6.0 # via llama-index-core networkx==3.2.1 # via - # -c requirements.txt + # -c requirements/../requirements.txt # llama-index-core # torch nltk==3.8.1 # via llama-index-core numpy==1.26.4 # via - # -c requirements.txt + # -c requirements/../requirements.txt # llama-index-core # pandas # scikit-learn @@ -152,55 +152,55 @@ numpy==1.26.4 # transformers openai==1.35.10 # via - # -c requirements.txt + # -c requirements/../requirements.txt # llama-index-core packaging==24.1 # via - # -c requirements.txt + # -c requirements/../requirements.txt # huggingface-hub # marshmallow # transformers pandas==2.2.2 # via - # -c requirements.txt + # -c requirements/../requirements.txt # llama-index-core pillow==10.4.0 # via - # -c requirements.txt + # -c requirements/../requirements.txt # llama-index-core # sentence-transformers pydantic==2.8.2 # via - # -c requirements.txt + # -c requirements/../requirements.txt # llama-cloud # openai pydantic-core==2.20.1 # via - # -c requirements.txt + # -c requirements/../requirements.txt # pydantic python-dateutil==2.9.0.post0 # via - # -c requirements.txt + # -c requirements/../requirements.txt # pandas pytz==2024.1 # via - # -c requirements.txt + # -c requirements/../requirements.txt # pandas pyyaml==6.0.1 # via - # -c requirements.txt + # -c requirements/../requirements.txt # huggingface-hub # llama-index-core # transformers regex==2024.5.15 # via - # -c requirements.txt + # -c requirements/../requirements.txt # nltk # tiktoken # transformers requests==2.32.3 # via - # -c requirements.txt + # -c requirements/../requirements.txt # huggingface-hub # llama-index-core # tiktoken @@ -211,18 +211,18 @@ scikit-learn==1.5.1 # via sentence-transformers scipy==1.13.1 # via - # -c requirements.txt + # -c requirements/../requirements.txt # scikit-learn # sentence-transformers sentence-transformers==3.0.1 # via llama-index-embeddings-huggingface six==1.16.0 # via - # -c requirements.txt + # -c requirements/../requirements.txt # python-dateutil sniffio==1.3.1 # via - # -c requirements.txt + # -c requirements/../requirements.txt # anyio # httpx # openai @@ -234,23 +234,23 @@ sympy==1.13.0 # via torch tenacity==8.4.2 # via - # -c requirements.txt + # -c requirements/../requirements.txt # llama-index-core threadpoolctl==3.5.0 # via scikit-learn tiktoken==0.7.0 # via - # -c requirements.txt + # -c requirements/../requirements.txt # llama-index-core tokenizers==0.19.1 # via - # -c requirements.txt + # -c requirements/../requirements.txt # transformers torch==2.2.2 # via sentence-transformers tqdm==4.66.4 # via - # -c requirements.txt + # -c requirements/../requirements.txt # huggingface-hub # llama-index-core # nltk @@ -261,7 +261,7 @@ transformers==4.42.3 # via sentence-transformers typing-extensions==4.12.2 # via - # -c requirements.txt + # -c requirements/../requirements.txt # huggingface-hub # llama-index-core # openai @@ -276,11 +276,11 @@ typing-inspect==0.9.0 # llama-index-core tzdata==2024.1 # via - # -c requirements.txt + # -c requirements/../requirements.txt # pandas urllib3==2.2.2 # via - # -c requirements.txt + # -c requirements/../requirements.txt # requests wrapt==1.16.0 # via @@ -288,5 +288,5 @@ wrapt==1.16.0 # llama-index-core yarl==1.9.4 # via - # -c requirements.txt + # -c requirements/../requirements.txt # aiohttp diff --git a/requirements.in b/requirements/requirements.in similarity index 100% rename from requirements.in rename to requirements/requirements.in diff --git a/scripts/pip-compile.sh b/scripts/pip-compile.sh index 956bac933..3ee55def4 100755 --- a/scripts/pip-compile.sh +++ b/scripts/pip-compile.sh @@ -3,7 +3,16 @@ # exit when any command fails set -e -pip-compile requirements.in $1 -pip-compile --output-file=requirements-dev.txt requirements-dev.in $1 -pip-compile --output-file=requirements-hf-embed.txt requirements-hf-embed.in $1 +pip-compile \ + requirements/requirements.in \ + --output-file=requirements.txt \ + $1 +for SUFFIX in dev hf-embed ; do + echo suffix: ${SUFFIX} + pip-compile \ + requirements/requirements-${SUFFIX}.in \ + --output-file=requirements/requirements-${SUFFIX}.txt \ + $1 +done + diff --git a/setup.py b/setup.py index 9afc96374..67e64263d 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,5 @@ import re +from pathlib import Path from setuptools import find_packages, setup @@ -7,15 +8,20 @@ from aider.help_pats import exclude_website_pats def get_requirements(suffix=""): - fname = "requirements" + suffix + ".txt" - with open(fname) as f: - requirements = f.read().splitlines() + 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() -dev_requirements = get_requirements("-dev") -hf_requirements = get_requirements("-hf-embed") +dev_requirements = get_requirements("dev") +hf_requirements = get_requirements("hf-embed") # README with open("README.md", "r", encoding="utf-8") as f: From 057c1af449ffc54c529e372ca843c859ea89c728 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sat, 13 Jul 2024 16:38:06 +0100 Subject: [PATCH 07/15] fixed gemma leaderboard yml --- aider/website/_data/edit_leaderboard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/website/_data/edit_leaderboard.yml b/aider/website/_data/edit_leaderboard.yml index 29b7ee269..8e2acbd89 100644 --- a/aider/website/_data/edit_leaderboard.yml +++ b/aider/website/_data/edit_leaderboard.yml @@ -682,7 +682,7 @@ seconds_per_case: 7.1 total_cost: 0.1946 - - dirname: 2024-07-09-10-12-27--gemma2:27b-instruct-q8_0 +- dirname: 2024-07-09-10-12-27--gemma2:27b-instruct-q8_0 test_cases: 133 model: gemma2:27b-instruct-q8_0 edit_format: whole From 76dad8428533cade5f5f3d984938e762d94d0ee0 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 14 Jul 2024 17:22:17 +0100 Subject: [PATCH 08/15] added [browser] extra; refac the pip install utils --- aider/commands.py | 31 ++--- aider/help.py | 31 +---- aider/main.py | 19 +++- aider/utils.py | 52 +++++++-- aider/versioncheck.py | 3 +- requirements.txt | 68 +---------- requirements/requirements-browser.in | 4 + requirements/requirements-browser.txt | 151 +++++++++++++++++++++++++ requirements/requirements-dev.txt | 17 +-- requirements/requirements-hf-embed.txt | 24 +--- requirements/requirements.in | 2 - scripts/pip-compile.sh | 4 +- setup.py | 2 + 13 files changed, 257 insertions(+), 151 deletions(-) create mode 100644 requirements/requirements-browser.in create mode 100644 requirements/requirements-browser.txt diff --git a/aider/commands.py b/aider/commands.py index b98e1f961..9c9f7d004 100644 --- a/aider/commands.py +++ b/aider/commands.py @@ -6,8 +6,8 @@ from pathlib import Path import git -from aider import models, prompts, voice -from aider.help import Help, PipInstallHF +from aider import models, prompts, utils, voice +from aider.help import Help from aider.llm import litellm from aider.scrape import Scraper from aider.utils import is_image_file @@ -662,19 +662,22 @@ class Commands: from aider.coders import Coder if not self.help: - try: - self.help = Help() - except PipInstallHF as err: - self.io.tool_error(str(err)) - if self.io.confirm_ask("Run pip install?", default="y"): - try: - self.help = Help(pip_install=True) - except PipInstallHF: - pass + pip_install_cmd = [ + "aider-chat[hf-embed]", + "--extra-index-url", + "https://download.pytorch.org/whl/cpu", + ] + res = utils.check_pip_install_extra( + self.io, + "llama_index.embeddings.huggingface", + "To use interactive /help you need to install HuggingFace embeddings", + pip_install_cmd, + ) + if not res: + self.io.tool_error("Unable to initialize interactive help.") + return - if not self.help: - self.io.tool_error("Unable to initialize interactive help.") - return + self.help = Help() coder = Coder.create( main_model=self.coder.main_model, diff --git a/aider/help.py b/aider/help.py index d93b411ff..41fba92a1 100755 --- a/aider/help.py +++ b/aider/help.py @@ -6,7 +6,7 @@ from pathlib import Path import importlib_resources -from aider import __version__, utils +from aider import __version__ from aider.dump import dump # noqa: F401 from aider.help_pats import exclude_website_pats @@ -87,35 +87,10 @@ def get_index(): return index -class PipInstallHF(Exception): - pass - - -pip_install_cmd = [ - "aider-chat[hf-embed]", - "--extra-index-url", - "https://download.pytorch.org/whl/cpu", -] - -pip_install_error = """ -To use interactive /help you need to install HuggingFace embeddings: - -{cmd} - -""" # noqa: E231 - - class Help: def __init__(self, pip_install=False): - cmd = utils.get_pip_install(pip_install_cmd) - if pip_install: - utils.run_install(cmd) - - try: - from llama_index.core import Settings - from llama_index.embeddings.huggingface import HuggingFaceEmbedding - except ImportError: - raise PipInstallHF(pip_install_error.format(cmd=' '.join(cmd))) + from llama_index.core import Settings + from llama_index.embeddings.huggingface import HuggingFaceEmbedding os.environ["TOKENIZERS_PARALLELISM"] = "true" Settings.embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5") diff --git a/aider/main.py b/aider/main.py index 8e52501f4..a8c9de437 100644 --- a/aider/main.py +++ b/aider/main.py @@ -148,6 +148,15 @@ def scrub_sensitive_info(args, text): return text +def check_streamlit_install(io): + return utils.check_pip_install_extra( + io, + "streamlit", + "You need to install the aider browser feature", + ["aider-chat[browser]"], + ) + + def launch_gui(args): from streamlit.web import cli @@ -318,10 +327,6 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F litellm.client_session = httpx.Client(verify=False) - if args.gui and not return_coder: - launch_gui(argv) - return - if args.dark_mode: args.user_input_color = "#32FF32" args.tool_error_color = "#FF3333" @@ -355,6 +360,12 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F editingmode=editing_mode, ) + if args.gui and not return_coder: + if not check_streamlit_install(io): + return + launch_gui(argv) + return + for fname in loaded_dotenvs: io.tool_output(f"Loaded {fname}") diff --git a/aider/utils.py b/aider/utils.py index 3efdb84da..2d80c84f2 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -1,8 +1,8 @@ +import itertools import os import subprocess import sys import tempfile -import itertools from pathlib import Path import git @@ -182,7 +182,6 @@ def split_chat_history_markdown(text, include_tool=False): def get_pip_install(args): - cmd = [ sys.executable, "-m", @@ -192,14 +191,22 @@ def get_pip_install(args): cmd += args return cmd + def run_install(cmd): print() - print("Installing: ", ' '.join(cmd)) + print("Installing: ", " ".join(cmd)) try: - process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, bufsize=1, universal_newlines=True) output = [] - spinner = itertools.cycle(['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']) + process = subprocess.Popen( + cmd, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True, + bufsize=1, + universal_newlines=True, + ) + spinner = itertools.cycle(["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"]) for line in process.stdout: output.append(line) @@ -208,14 +215,45 @@ def run_install(cmd): return_code = process.wait() if return_code == 0: - print("\rInstallation completed successfully.") + print("\rInstallation complete.") print() - return True + return True, output except subprocess.CalledProcessError as e: print(f"\nError running pip install: {e}") print("\nInstallation failed.\n") + return False, output + + +def check_pip_install_extra(io, module, prompt, pip_install_cmd): + try: + __import__(module) + return True + except (ImportError, ModuleNotFoundError): + pass + + cmd = get_pip_install(pip_install_cmd) + + text = f"{prompt}:\n\n{' '.join(cmd)}\n\n" + io.tool_error(text) + + if not io.confirm_ask("Run pip install?", default="y"): + return + + success, output = run_install(cmd) + if not success: + return + + try: + __import__(module) + return True + except (ImportError, ModuleNotFoundError): + pass + for line in output: print(line) + + print() + print(f"Failed to install {pip_install_cmd[0]}") diff --git a/aider/versioncheck.py b/aider/versioncheck.py index c0133f582..20ee0b076 100644 --- a/aider/versioncheck.py +++ b/aider/versioncheck.py @@ -49,7 +49,8 @@ Newer aider version v{latest_version} is available. To upgrade, run: io.tool_error(text) if io.confirm_ask("Run pip install?"): - if utils.run_install(cmd): + success, _output = utils.run_install(cmd) + if success: io.tool_output("Re-run aider to use new version.") sys.exit() diff --git a/requirements.txt b/requirements.txt index 8176e9cf2..836b244c3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,8 +8,6 @@ aiohttp==3.9.5 # via litellm aiosignal==1.3.1 # via aiohttp -altair==5.3.0 - # via streamlit annotated-types==0.7.0 # via pydantic anyio==4.4.0 @@ -25,12 +23,8 @@ backoff==2.2.1 # via -r requirements/requirements.in beautifulsoup4==4.12.3 # via -r requirements/requirements.in -blinker==1.8.2 - # via streamlit cachetools==5.3.3 - # via - # google-auth - # streamlit + # via google-auth certifi==2024.7.4 # via # httpcore @@ -43,9 +37,7 @@ cffi==1.16.0 charset-normalizer==3.3.2 # via requests click==8.1.7 - # via - # litellm - # streamlit + # via litellm configargparse==1.7 # via -r requirements/requirements.in diff-match-patch==20230430 @@ -67,9 +59,7 @@ fsspec==2024.6.1 gitdb==4.0.11 # via gitpython gitpython==3.1.43 - # via - # -r requirements/requirements.in - # streamlit + # via -r requirements/requirements.in google-ai-generativelanguage==0.6.6 # via google-generativeai google-api-core[grpc]==2.19.1 @@ -129,14 +119,10 @@ importlib-metadata==7.2.1 importlib-resources==6.4.0 # via -r requirements/requirements.in jinja2==3.1.4 - # via - # altair - # litellm - # pydeck + # via litellm jsonschema==4.22.0 # via # -r requirements/requirements.in - # altair # litellm jsonschema-specifications==2023.12.1 # via jsonschema @@ -159,32 +145,19 @@ networkx==3.2.1 numpy==1.26.4 # via # -r requirements/requirements.in - # altair - # pandas - # pyarrow - # pydeck # scipy - # streamlit openai==1.35.10 # via litellm packaging==24.1 # via # -r requirements/requirements.in - # altair # huggingface-hub - # streamlit -pandas==2.2.2 - # via - # altair - # streamlit pathspec==0.12.1 # via # -r requirements/requirements.in # grep-ast pillow==10.4.0 - # via - # -r requirements/requirements.in - # streamlit + # via -r requirements/requirements.in playwright==1.45.0 # via -r requirements/requirements.in prompt-toolkit==3.0.47 @@ -201,9 +174,6 @@ protobuf==4.25.3 # googleapis-common-protos # grpcio-status # proto-plus - # streamlit -pyarrow==16.1.0 - # via streamlit pyasn1==0.6.0 # via # pyasn1-modules @@ -221,8 +191,6 @@ pydantic==2.8.2 # openai pydantic-core==2.20.1 # via pydantic -pydeck==0.9.1 - # via streamlit pyee==11.1.0 # via playwright pyflakes==3.2.0 @@ -233,12 +201,8 @@ pypandoc==1.13 # via -r requirements/requirements.in pyparsing==3.1.2 # via httplib2 -python-dateutil==2.9.0.post0 - # via pandas python-dotenv==1.0.1 # via litellm -pytz==2024.1 - # via pandas pyyaml==6.0.1 # via # -r requirements/requirements.in @@ -254,12 +218,9 @@ requests==2.32.3 # google-api-core # huggingface-hub # litellm - # streamlit # tiktoken rich==13.7.1 - # via - # -r requirements/requirements.in - # streamlit + # via -r requirements/requirements.in rpds-py==0.18.1 # via # jsonschema @@ -268,8 +229,6 @@ rsa==4.9 # via google-auth scipy==1.13.1 # via -r requirements/requirements.in -six==1.16.0 - # via python-dateutil smmap==5.0.1 # via gitdb sniffio==1.3.1 @@ -283,20 +242,10 @@ soundfile==0.12.1 # via -r requirements/requirements.in soupsieve==2.5 # via beautifulsoup4 -streamlit==1.36.0 - # via -r requirements/requirements.in -tenacity==8.4.2 - # via streamlit tiktoken==0.7.0 # via litellm tokenizers==0.19.1 # via litellm -toml==0.10.2 - # via streamlit -toolz==0.12.1 - # via altair -tornado==6.4.1 - # via streamlit tqdm==4.66.4 # via # google-generativeai @@ -316,15 +265,10 @@ typing-extensions==4.12.2 # pydantic # pydantic-core # pyee - # streamlit -tzdata==2024.1 - # via pandas uritemplate==4.1.1 # via google-api-python-client urllib3==2.2.2 # via requests -watchdog==4.0.1 - # via -r requirements/requirements.in wcwidth==0.2.13 # via prompt-toolkit yarl==1.9.4 diff --git a/requirements/requirements-browser.in b/requirements/requirements-browser.in new file mode 100644 index 000000000..cf7811e0d --- /dev/null +++ b/requirements/requirements-browser.in @@ -0,0 +1,4 @@ +-c ../requirements.txt + +streamlit +watchdog diff --git a/requirements/requirements-browser.txt b/requirements/requirements-browser.txt new file mode 100644 index 000000000..d6d63717b --- /dev/null +++ b/requirements/requirements-browser.txt @@ -0,0 +1,151 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --output-file=requirements/requirements-browser.txt requirements/requirements-browser.in +# +altair==5.3.0 + # via streamlit +attrs==23.2.0 + # via + # -c requirements/../requirements.txt + # jsonschema + # referencing +blinker==1.8.2 + # via streamlit +cachetools==5.3.3 + # via + # -c requirements/../requirements.txt + # streamlit +certifi==2024.7.4 + # via + # -c requirements/../requirements.txt + # requests +charset-normalizer==3.3.2 + # via + # -c requirements/../requirements.txt + # requests +click==8.1.7 + # via + # -c requirements/../requirements.txt + # streamlit +gitdb==4.0.11 + # via + # -c requirements/../requirements.txt + # gitpython +gitpython==3.1.43 + # via + # -c requirements/../requirements.txt + # streamlit +idna==3.7 + # via + # -c requirements/../requirements.txt + # requests +jinja2==3.1.4 + # via + # -c requirements/../requirements.txt + # altair + # pydeck +jsonschema==4.22.0 + # via + # -c requirements/../requirements.txt + # altair +jsonschema-specifications==2023.12.1 + # via + # -c requirements/../requirements.txt + # jsonschema +markdown-it-py==3.0.0 + # via + # -c requirements/../requirements.txt + # rich +markupsafe==2.1.5 + # via + # -c requirements/../requirements.txt + # jinja2 +mdurl==0.1.2 + # via + # -c requirements/../requirements.txt + # markdown-it-py +numpy==1.26.4 + # via + # -c requirements/../requirements.txt + # altair + # pandas + # pyarrow + # pydeck + # streamlit +packaging==24.1 + # via + # -c requirements/../requirements.txt + # altair + # streamlit +pandas==2.2.2 + # via + # altair + # streamlit +pillow==10.4.0 + # via + # -c requirements/../requirements.txt + # streamlit +protobuf==4.25.3 + # via + # -c requirements/../requirements.txt + # streamlit +pyarrow==16.1.0 + # via streamlit +pydeck==0.9.1 + # via streamlit +pygments==2.18.0 + # via + # -c requirements/../requirements.txt + # rich +python-dateutil==2.9.0.post0 + # via pandas +pytz==2024.1 + # via pandas +referencing==0.35.1 + # via + # -c requirements/../requirements.txt + # jsonschema + # jsonschema-specifications +requests==2.32.3 + # via + # -c requirements/../requirements.txt + # streamlit +rich==13.7.1 + # via + # -c requirements/../requirements.txt + # streamlit +rpds-py==0.18.1 + # via + # -c requirements/../requirements.txt + # jsonschema + # referencing +six==1.16.0 + # via python-dateutil +smmap==5.0.1 + # via + # -c requirements/../requirements.txt + # gitdb +streamlit==1.36.0 + # via -r requirements/requirements-browser.in +tenacity==8.4.2 + # via streamlit +toml==0.10.2 + # via streamlit +toolz==0.12.1 + # via altair +tornado==6.4.1 + # via streamlit +typing-extensions==4.12.2 + # via + # -c requirements/../requirements.txt + # streamlit +tzdata==2024.1 + # via pandas +urllib3==2.2.2 + # via + # -c requirements/../requirements.txt + # requests +watchdog==4.0.1 + # via -r requirements/requirements-browser.in diff --git a/requirements/requirements-dev.txt b/requirements/requirements-dev.txt index 4c74677fb..96e927a91 100644 --- a/requirements/requirements-dev.txt +++ b/requirements/requirements-dev.txt @@ -99,9 +99,7 @@ packaging==24.1 # pytest # sphinx pandas==2.2.2 - # via - # -c requirements/../requirements.txt - # -r requirements/requirements-dev.in + # via -r requirements/requirements-dev.in pathos==0.3.2 # via lox pillow==10.4.0 @@ -137,13 +135,10 @@ pytest==8.2.2 # via -r requirements/requirements-dev.in python-dateutil==2.9.0.post0 # via - # -c requirements/../requirements.txt # matplotlib # pandas pytz==2024.1 - # via - # -c requirements/../requirements.txt - # pandas + # via pandas pyyaml==6.0.1 # via # -c requirements/../requirements.txt @@ -159,9 +154,7 @@ rich==13.7.1 shellingham==1.5.4 # via typer six==1.16.0 - # via - # -c requirements/../requirements.txt - # python-dateutil + # via python-dateutil snowballstemmer==2.2.0 # via sphinx sphinx==7.3.7 @@ -191,9 +184,7 @@ typing-extensions==4.12.2 # -c requirements/../requirements.txt # typer tzdata==2024.1 - # via - # -c requirements/../requirements.txt - # pandas + # via pandas urllib3==2.2.2 # via # -c requirements/../requirements.txt diff --git a/requirements/requirements-hf-embed.txt b/requirements/requirements-hf-embed.txt index 6911de143..f592ff8a1 100644 --- a/requirements/requirements-hf-embed.txt +++ b/requirements/requirements-hf-embed.txt @@ -161,9 +161,7 @@ packaging==24.1 # marshmallow # transformers pandas==2.2.2 - # via - # -c requirements/../requirements.txt - # llama-index-core + # via llama-index-core pillow==10.4.0 # via # -c requirements/../requirements.txt @@ -179,13 +177,9 @@ pydantic-core==2.20.1 # -c requirements/../requirements.txt # pydantic python-dateutil==2.9.0.post0 - # via - # -c requirements/../requirements.txt - # pandas + # via pandas pytz==2024.1 - # via - # -c requirements/../requirements.txt - # pandas + # via pandas pyyaml==6.0.1 # via # -c requirements/../requirements.txt @@ -217,9 +211,7 @@ scipy==1.13.1 sentence-transformers==3.0.1 # via llama-index-embeddings-huggingface six==1.16.0 - # via - # -c requirements/../requirements.txt - # python-dateutil + # via python-dateutil sniffio==1.3.1 # via # -c requirements/../requirements.txt @@ -233,9 +225,7 @@ sqlalchemy[asyncio]==2.0.31 sympy==1.13.0 # via torch tenacity==8.4.2 - # via - # -c requirements/../requirements.txt - # llama-index-core + # via llama-index-core threadpoolctl==3.5.0 # via scikit-learn tiktoken==0.7.0 @@ -275,9 +265,7 @@ typing-inspect==0.9.0 # dataclasses-json # llama-index-core tzdata==2024.1 - # via - # -c requirements/../requirements.txt - # pandas + # via pandas urllib3==2.2.2 # via # -c requirements/../requirements.txt diff --git a/requirements/requirements.in b/requirements/requirements.in index 0dc1f21e0..eef49032d 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -23,8 +23,6 @@ playwright pypandoc litellm google-generativeai -streamlit -watchdog flake8 importlib_resources diff --git a/scripts/pip-compile.sh b/scripts/pip-compile.sh index 3ee55def4..ffc0e9784 100755 --- a/scripts/pip-compile.sh +++ b/scripts/pip-compile.sh @@ -8,8 +8,8 @@ pip-compile \ --output-file=requirements.txt \ $1 -for SUFFIX in dev hf-embed ; do - echo suffix: ${SUFFIX} +for SUFFIX in dev hf-embed browser; do + pip-compile \ requirements/requirements-${SUFFIX}.in \ --output-file=requirements/requirements-${SUFFIX}.txt \ diff --git a/setup.py b/setup.py index 67e64263d..83dbf56d7 100644 --- a/setup.py +++ b/setup.py @@ -22,6 +22,7 @@ def get_requirements(suffix=""): requirements = get_requirements() dev_requirements = get_requirements("dev") hf_requirements = get_requirements("hf-embed") +browser_requirements = get_requirements("browser") # README with open("README.md", "r", encoding="utf-8") as f: @@ -47,6 +48,7 @@ setup( extras_require={ "dev": dev_requirements, "hf-embed": hf_requirements, + "browser": browser_requirements, }, python_requires=">=3.9,<3.13", entry_points={ From e9bde684ae495ea7a8c014765c30b391cb0a7abe Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 14 Jul 2024 17:24:51 +0100 Subject: [PATCH 09/15] updated benchmark docker to use [dev] --- benchmark/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmark/Dockerfile b/benchmark/Dockerfile index b09979b06..26f7b0b19 100644 --- a/benchmark/Dockerfile +++ b/benchmark/Dockerfile @@ -1,8 +1,8 @@ FROM python:3.10-slim RUN apt-get update RUN apt-get install -y less git build-essential -COPY requirements-dev.txt /aider/requirements-dev.txt +COPY . /aider RUN pip install --no-cache-dir --upgrade pip -RUN pip install --no-cache-dir -r /aider/requirements-dev.txt +RUN pip install --no-cache-dir /aider[dev] RUN git config --global --add safe.directory /aider WORKDIR /aider From edcf66c69400789dba602182d04d5ffc2edbf77b Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 14 Jul 2024 17:41:21 +0100 Subject: [PATCH 10/15] Added missing Model.can_prefill --- aider/models.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/aider/models.py b/aider/models.py index c65da38ae..7194bbcc2 100644 --- a/aider/models.py +++ b/aider/models.py @@ -58,6 +58,7 @@ ANTHROPIC_MODELS = [ln.strip() for ln in ANTHROPIC_MODELS.splitlines() if ln.str @dataclass class ModelSettings: + # Model class needs to have each of these as well name: str edit_format: str weak_model_name: Optional[str] = None @@ -360,6 +361,7 @@ class Model: lazy = False reminder_as_sys_msg = False examples_as_sys_msg = False + can_prefill = False max_chat_history_tokens = 1024 weak_model = None From 9c9fdb0a1be030d1ad5ff00604627358bed5ad01 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 14 Jul 2024 17:42:20 +0100 Subject: [PATCH 11/15] Fixed sample yml file to use proper filename --- aider/args_formatter.py | 2 +- aider/website/assets/sample.aider.conf.yml | 2 +- aider/website/docs/config/aider_conf.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aider/args_formatter.py b/aider/args_formatter.py index f2f1df195..f97cb433d 100644 --- a/aider/args_formatter.py +++ b/aider/args_formatter.py @@ -91,7 +91,7 @@ class YamlHelpFormatter(argparse.HelpFormatter): def _format_text(self, text): return """ ########################################################## -# Sample .aider.conf.yaml +# Sample .aider.conf.yml # This file lists *all* the valid configuration entries. # Place in your home dir, or at the root of your git repo. ########################################################## diff --git a/aider/website/assets/sample.aider.conf.yml b/aider/website/assets/sample.aider.conf.yml index 24d525b32..654430e3b 100644 --- a/aider/website/assets/sample.aider.conf.yml +++ b/aider/website/assets/sample.aider.conf.yml @@ -1,5 +1,5 @@ ########################################################## -# Sample .aider.conf.yaml +# Sample .aider.conf.yml # This file lists *all* the valid configuration entries. # Place in your home dir, or at the root of your git repo. ########################################################## diff --git a/aider/website/docs/config/aider_conf.md b/aider/website/docs/config/aider_conf.md index 3c7145560..621d8a9e9 100644 --- a/aider/website/docs/config/aider_conf.md +++ b/aider/website/docs/config/aider_conf.md @@ -38,7 +38,7 @@ cog.outl("```") ]]]--> ``` ########################################################## -# Sample .aider.conf.yaml +# Sample .aider.conf.yml # This file lists *all* the valid configuration entries. # Place in your home dir, or at the root of your git repo. ########################################################## From 9ed0e33b9fe55d0d57e09da5e29829b0e8476a75 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 14 Jul 2024 17:49:33 +0100 Subject: [PATCH 12/15] refactor help install and add to test setup --- aider/commands.py | 16 +++------------- aider/help.py | 19 +++++++++++++++++-- aider/tests/test_help.py | 6 ++++-- aider/utils.py | 2 +- 4 files changed, 25 insertions(+), 18 deletions(-) diff --git a/aider/commands.py b/aider/commands.py index 9c9f7d004..d964733e9 100644 --- a/aider/commands.py +++ b/aider/commands.py @@ -6,8 +6,8 @@ from pathlib import Path import git -from aider import models, prompts, utils, voice -from aider.help import Help +from aider import models, prompts, voice +from aider.help import Help, install_help_extra from aider.llm import litellm from aider.scrape import Scraper from aider.utils import is_image_file @@ -662,17 +662,7 @@ class Commands: from aider.coders import Coder if not self.help: - pip_install_cmd = [ - "aider-chat[hf-embed]", - "--extra-index-url", - "https://download.pytorch.org/whl/cpu", - ] - res = utils.check_pip_install_extra( - self.io, - "llama_index.embeddings.huggingface", - "To use interactive /help you need to install HuggingFace embeddings", - pip_install_cmd, - ) + res = install_help_extra(self.io) if not res: self.io.tool_error("Unable to initialize interactive help.") return diff --git a/aider/help.py b/aider/help.py index 41fba92a1..24c549099 100755 --- a/aider/help.py +++ b/aider/help.py @@ -6,13 +6,28 @@ from pathlib import Path import importlib_resources -from aider import __version__ +from aider import __version__, utils from aider.dump import dump # noqa: F401 from aider.help_pats import exclude_website_pats warnings.simplefilter("ignore", category=FutureWarning) +def install_help_extra(io): + pip_install_cmd = [ + "aider-chat[hf-embed]", + "--extra-index-url", + "https://download.pytorch.org/whl/cpu", + ] + res = utils.check_pip_install_extra( + io, + "llama_index.embeddings.huggingface", + "To use interactive /help you need to install HuggingFace embeddings", + pip_install_cmd, + ) + return res + + def get_package_files(): for path in importlib_resources.files("aider.website").iterdir(): if path.is_file(): @@ -88,7 +103,7 @@ def get_index(): class Help: - def __init__(self, pip_install=False): + def __init__(self): from llama_index.core import Settings from llama_index.embeddings.huggingface import HuggingFaceEmbedding diff --git a/aider/tests/test_help.py b/aider/tests/test_help.py index 102160b84..667170b29 100644 --- a/aider/tests/test_help.py +++ b/aider/tests/test_help.py @@ -1,11 +1,13 @@ import unittest -from aider.help import Help +from aider.help import Help, install_help_extra +from aider.io import InputOutput class TestHelp(unittest.TestCase): def setUp(self): - Help(pip_install=True) + io = InputOutput(yes=True) + install_help_extra(io) def test_init(self): help_inst = Help() diff --git a/aider/utils.py b/aider/utils.py index 2d80c84f2..2aef5eff2 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -236,7 +236,7 @@ def check_pip_install_extra(io, module, prompt, pip_install_cmd): cmd = get_pip_install(pip_install_cmd) - text = f"{prompt}:\n\n{' '.join(cmd)}\n\n" + text = f"{prompt}:\n\n{' '.join(cmd)}\n" io.tool_error(text) if not io.confirm_ask("Run pip install?", default="y"): From 29afc85957870eb5a382613b7d999b05504694ba Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 14 Jul 2024 18:25:22 +0100 Subject: [PATCH 13/15] drop google-generativeai as dep --- requirements/requirements.in | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements/requirements.in b/requirements/requirements.in index eef49032d..2a60f6a53 100644 --- a/requirements/requirements.in +++ b/requirements/requirements.in @@ -22,7 +22,6 @@ diff-match-patch playwright pypandoc litellm -google-generativeai flake8 importlib_resources From 50353acb1aaf313d86873a379e303ae7cae34031 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 14 Jul 2024 18:26:05 +0100 Subject: [PATCH 14/15] return fq and model names mixed together from fuzzy match --- aider/models.py | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/aider/models.py b/aider/models.py index 7194bbcc2..ba2d65980 100644 --- a/aider/models.py +++ b/aider/models.py @@ -654,11 +654,7 @@ def sanity_check_model(io, model): if possible_matches: io.tool_output("Did you mean one of these?") for match in possible_matches: - fq, m = match - if fq == m: - io.tool_output(f"- {m}") - else: - io.tool_output(f"- {m} ({fq})") + io.tool_output(f"- {model}") if show: io.tool_output(f"For more info, see: {urls.model_warnings}\n") @@ -667,7 +663,7 @@ def sanity_check_model(io, model): def fuzzy_match_models(name): name = name.lower() - chat_models = [] + chat_models = set() for model, attrs in litellm.model_cost.items(): model = model.lower() if attrs.get("mode") != "chat": @@ -679,8 +675,10 @@ def fuzzy_match_models(name): else: fq_model = provider + model - chat_models.append((fq_model, model)) + chat_models.add(fq_model) + chat_models.add(model) + chat_models = sorted(chat_models) # exactly matching model # matching_models = [ # (fq,m) for fq,m in chat_models @@ -690,19 +688,14 @@ def fuzzy_match_models(name): # return matching_models # Check for model names containing the name - matching_models = [(fq, m) for fq, m in chat_models if name in fq] + matching_models = [m for m in chat_models if name in m] if matching_models: return matching_models # Check for slight misspellings - models = [m for fq, m in chat_models] + models = list(chat_models) matching_models = difflib.get_close_matches(name, models, n=3, cutoff=0.8) - if matching_models: - return list(zip(matching_models, matching_models)) - - fq_models = [fq for fq, m in chat_models] - matching_models = difflib.get_close_matches(name, fq_models, n=3, cutoff=0.8) - return list(zip(matching_models, matching_models)) + return sorted(matching_models) def print_matching_models(io, search): @@ -710,8 +703,7 @@ def print_matching_models(io, search): if matches: io.tool_output(f'Models which match "{search}":') for model in matches: - fq, m = model - io.tool_output(f"- {fq}") + io.tool_output(f"- {model}") else: io.tool_output(f'No models match "{search}".') From e484c47e47c1ce0daa66a11df692c2e0fe172dcd Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 14 Jul 2024 18:26:12 +0100 Subject: [PATCH 15/15] copy --- aider/website/docs/llms/other.md | 1 + 1 file changed, 1 insertion(+) diff --git a/aider/website/docs/llms/other.md b/aider/website/docs/llms/other.md index d3cfcf2fc..007b0fbf1 100644 --- a/aider/website/docs/llms/other.md +++ b/aider/website/docs/llms/other.md @@ -71,6 +71,7 @@ cog.out(''.join(lines)) - DATABRICKS_API_KEY - DEEPINFRA_API_KEY - DEEPSEEK_API_KEY +- EMPOWER_API_KEY - FIREWORKSAI_API_KEY - FIREWORKS_AI_API_KEY - FIREWORKS_API_KEY