Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: Aider-AI/aider
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.75.0
Choose a base ref
...
head repository: Aider-AI/aider
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v0.76.0
Choose a head ref
Loading
Showing with 5,314 additions and 2,240 deletions.
  1. +43 −0 HISTORY.md
  2. +4 −4 README.md
  3. +1 −1 aider/__init__.py
  4. +29 −98 aider/args.py
  5. +7 −4 aider/args_formatter.py
  6. +85 −7 aider/coders/base_coder.py
  7. +125 −0 aider/deprecated.py
  8. +137 −27 aider/io.py
  9. +23 −36 aider/main.py
  10. +82 −14 aider/models.py
  11. +26 −0 aider/queries/tree-sitter-language-pack/csharp-tags.scm
  12. +82 −0 aider/reasoning_tags.py
  13. +6 −3 aider/repo.py
  14. +9 −0 aider/repomap.py
  15. +70 −0 aider/resources/model-metadata.json
  16. +199 −5 aider/resources/model-settings.yml
  17. +43 −0 aider/website/HISTORY.md
  18. +70 −0 aider/website/_data/blame.yml
  19. +134 −2 aider/website/_data/polyglot_leaderboard.yml
  20. +2 −2 aider/website/_includes/get-started.md
  21. +48 −1 aider/website/_includes/leaderboard.js
  22. +1 −3 aider/website/_posts/2024-05-02-browser.md
  23. +1,000 −1,000 aider/website/assets/sample-analytics.jsonl
  24. +49 −40 aider/website/assets/sample.aider.conf.yml
  25. +44 −35 aider/website/assets/sample.env
  26. +199 −4 aider/website/docs/config/adv-model-settings.md
  27. +49 −40 aider/website/docs/config/aider_conf.md
  28. +44 −35 aider/website/docs/config/dotenv.md
  29. +25 −2 aider/website/docs/config/model-aliases.md
  30. +93 −69 aider/website/docs/config/options.md
  31. +48 −32 aider/website/docs/config/reasoning.md
  32. +4 −10 aider/website/docs/faq.md
  33. +1 −1 aider/website/docs/install/optional.md
  34. +2 −3 aider/website/docs/languages.md
  35. +2 −2 aider/website/docs/leaderboards/index.md
  36. +9 −0 aider/website/docs/leaderboards/notes.md
  37. +1 −1 aider/website/docs/llms.md
  38. +33 −2 aider/website/docs/llms/anthropic.md
  39. +36 −0 aider/website/docs/llms/bedrock.md
  40. +1 −1 aider/website/docs/llms/deepseek.md
  41. +7 −5 aider/website/docs/llms/lm-studio.md
  42. +1 −1 aider/website/docs/llms/openai.md
  43. +4 −4 aider/website/docs/llms/openrouter.md
  44. +9 −0 aider/website/docs/more/infinite-output.md
  45. +2 −2 aider/website/docs/troubleshooting/edit-errors.md
  46. +2 −2 aider/website/docs/troubleshooting/models-and-keys.md
  47. +1 −1 aider/website/docs/usage.md
  48. +2 −2 aider/website/docs/usage/browser.md
  49. +1 −1 aider/website/docs/usage/images-urls.md
  50. +64 −0 aider/website/docs/usage/notifications.md
  51. +4 −4 aider/website/index.md
  52. +1 −0 benchmark/benchmark.py
  53. +2 −2 benchmark/problem_stats.py
  54. +1 −1 docker/Dockerfile
  55. +255 −93 requirements.txt
  56. +514 −0 requirements/common-constraints.txt
  57. +1 −4 requirements/requirements-browser.in
  58. +63 −122 requirements/requirements-browser.txt
  59. +1 −4 requirements/requirements-dev.in
  60. +129 −145 requirements/requirements-dev.txt
  61. +6 −7 requirements/requirements-help.in
  62. +116 −130 requirements/requirements-help.txt
  63. +0 −5 requirements/requirements-playwright.in
  64. +12 −17 requirements/requirements-playwright.txt
  65. +1 −17 requirements/requirements.in
  66. +3 −0 requirements/tree-sitter.in
  67. +1 −0 scripts/blame.py
  68. +29 −13 scripts/pip-compile.sh
  69. +1 −1 scripts/update-history.py
  70. +68 −52 scripts/versionbump.py
  71. +140 −0 tests/basic/test_deprecated.py
  72. +54 −0 tests/basic/test_io.py
  73. +99 −0 tests/basic/test_main.py
  74. +80 −0 tests/basic/test_model_info_manager.py
  75. +69 −62 tests/basic/test_models.py
  76. +609 −0 tests/basic/test_reasoning.py
  77. +2 −2 tests/basic/test_repomap.py
  78. +0 −40 tests/basic/test_sanity_check_repo.py
  79. +77 −0 tests/basic/test_ssl_verification.py
  80. +17 −17 tests/fixtures/sample-code-base-repo-map.txt
43 changes: 43 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,54 @@
# Release history

### main branch

- Improved support for thinking/reasoningmodels:
- Added `--thinking-tokens` CLI option to control token budget for models that support thinking.
- Display thinking/reasoning content from LLMs which return it.
- Enhanced handling of reasoning tags to better clean up model responses.
- Added deprecation warning for `remove_reasoning` setting, now replaced by `reasoning_tag`.
- Aider will notify you when it's completed the last request and needs your input:
- Added [notifications when LLM responses are ready](https://aider.chat/docs/usage/notifications.html) with `--notifications` flag.
- Specify desktop notification command with `--notifications-command`.
- Added support for QWQ 32B.
- Switch to `tree-sitter-language-pack` for tree sitter support.
- Improved error handling for EOF (Ctrl+D) in user input prompts.
- Added helper function to ensure hex color values have a # prefix.
- Fixed handling of Git errors when reading staged files.
- Improved SSL verification control for model information requests.
- Improved empty LLM response handling with clearer warning messages.
- Fixed Git identity retrieval to respect global configuration, by Akira Komamura.
- Offer to install dependencies for Bedrock and Vertex AI models.
- Deprecated model shortcut args (like --4o, --opus) in favor of the --model flag.
- Added C# language support for tree-sitter parsing.
- Improved handling of NO_COLOR environment variable for disabling colored output.
- Simplified reasoning content handling in stream processing.
- Added support for both reasoning and reasoning_content fields from different models.
- Aider wrote 85% of the code in this release.

### Aider v0.75.3

- Support for V3 free on OpenRouter: `--model openrouter/deepseek/deepseek-chat:free`.

### Aider v0.75.2

- Added support for Claude 3.7 Sonnet models on OpenRouter, Bedrock and Vertex AI.
- Updated default model to Claude 3.7 Sonnet on OpenRouter.
- Added support for GPT-4.5-preview model.
- Added support for Claude 3.7 Sonnet:beta on OpenRouter.
- Fixed weak_model_name patterns to match main model name patterns for some models.

### Aider v0.75.1

- Added support for `openrouter/anthropic/claude-3.7-sonnet`

### Aider v0.75.0

- Basic support for Claude 3.7 Sonnet
- Use `--model sonnet` to use the new 3.7
- Thinking support coming soon.
- Bugfix to `/editor` command.
- Aider wrote 46% of the code in this release.

### Aider v0.74.3

8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -6,7 +6,7 @@
Aider lets you pair program with LLMs,
to edit code in your local git repository.
Start a new project or work with an existing code base.
Aider works best with Claude 3.5 Sonnet, DeepSeek R1 & Chat V3, OpenAI o1, o3-mini & GPT-4o. Aider can [connect to almost any LLM, including local models](https://aider.chat/docs/llms.html).
Aider works best with Claude 3.7 Sonnet, DeepSeek R1 & Chat V3, OpenAI o1, o3-mini & GPT-4o. Aider can [connect to almost any LLM, including local models](https://aider.chat/docs/llms.html).

<!-- SCREENCAST START -->
<p align="center">
@@ -54,14 +54,14 @@ cd /to/your/project
# Work with DeepSeek via DeepSeek's API
aider --model deepseek --api-key deepseek=your-key-goes-here

# Work with Claude 3.5 Sonnet via Anthropic's API
# Work with Claude 3.7 Sonnet via Anthropic's API
aider --model sonnet --api-key anthropic=your-key-goes-here

# Work with GPT-4o via OpenAI's API
aider --model gpt-4o --api-key openai=your-key-goes-here

# Work with Sonnet via OpenRouter's API
aider --model openrouter/anthropic/claude-3.5-sonnet --api-key openrouter=your-key-goes-here
aider --model openrouter/anthropic/claude-3.7-sonnet --api-key openrouter=your-key-goes-here

# Work with DeepSeek via OpenRouter's API
aider --model openrouter/deepseek/deepseek-chat --api-key openrouter=your-key-goes-here
@@ -95,7 +95,7 @@ Pair program with AI.
- [Add images to the chat](https://aider.chat/docs/usage/images-urls.html) (GPT-4o, Claude 3.5 Sonnet, etc).
- [Add URLs to the chat](https://aider.chat/docs/usage/images-urls.html) and aider will read their content.
- [Code with your voice](https://aider.chat/docs/usage/voice.html).
- Aider works best with Claude 3.5 Sonnet, DeepSeek V3, o1 & GPT-4o and can [connect to almost any LLM](https://aider.chat/docs/llms.html).
- Aider works best with Claude 3.7 Sonnet, DeepSeek V3, o1 & GPT-4o and can [connect to almost any LLM](https://aider.chat/docs/llms.html).


## Top tier performance
2 changes: 1 addition & 1 deletion aider/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from packaging import version

__version__ = "0.75.0"
__version__ = "0.76.0"
safe_version = __version__

try:
127 changes: 29 additions & 98 deletions aider/args.py
Original file line number Diff line number Diff line change
@@ -12,6 +12,7 @@
MarkdownHelpFormatter,
YamlHelpFormatter,
)
from aider.deprecated import add_deprecated_model_args

from .dump import dump # noqa: F401

@@ -38,98 +39,6 @@ def get_parser(default_config_files, git_root):
default=None,
help="Specify the model to use for the main chat",
)
opus_model = "claude-3-opus-20240229"
group.add_argument(
"--opus",
action="store_const",
dest="model",
const=opus_model,
help=f"Use {opus_model} model for the main chat",
)
sonnet_model = "anthropic/claude-3-7-sonnet-20250219"
group.add_argument(
"--sonnet",
action="store_const",
dest="model",
const=sonnet_model,
help=f"Use {sonnet_model} model for the main chat",
)
haiku_model = "claude-3-5-haiku-20241022"
group.add_argument(
"--haiku",
action="store_const",
dest="model",
const=haiku_model,
help=f"Use {haiku_model} model for the main chat",
)
gpt_4_model = "gpt-4-0613"
group.add_argument(
"--4",
"-4",
action="store_const",
dest="model",
const=gpt_4_model,
help=f"Use {gpt_4_model} model for the main chat",
)
gpt_4o_model = "gpt-4o"
group.add_argument(
"--4o",
action="store_const",
dest="model",
const=gpt_4o_model,
help=f"Use {gpt_4o_model} model for the main chat",
)
gpt_4o_mini_model = "gpt-4o-mini"
group.add_argument(
"--mini",
action="store_const",
dest="model",
const=gpt_4o_mini_model,
help=f"Use {gpt_4o_mini_model} model for the main chat",
)
gpt_4_turbo_model = "gpt-4-1106-preview"
group.add_argument(
"--4-turbo",
action="store_const",
dest="model",
const=gpt_4_turbo_model,
help=f"Use {gpt_4_turbo_model} model for the main chat",
)
gpt_3_model_name = "gpt-3.5-turbo"
group.add_argument(
"--35turbo",
"--35-turbo",
"--3",
"-3",
action="store_const",
dest="model",
const=gpt_3_model_name,
help=f"Use {gpt_3_model_name} model for the main chat",
)
deepseek_model = "deepseek/deepseek-chat"
group.add_argument(
"--deepseek",
action="store_const",
dest="model",
const=deepseek_model,
help=f"Use {deepseek_model} model for the main chat",
)
o1_mini_model = "o1-mini"
group.add_argument(
"--o1-mini",
action="store_const",
dest="model",
const=o1_mini_model,
help=f"Use {o1_mini_model} model for the main chat",
)
o1_preview_model = "o1-preview"
group.add_argument(
"--o1-preview",
action="store_const",
dest="model",
const=o1_preview_model,
help=f"Use {o1_preview_model} model for the main chat",
)

##########
group = parser.add_argument_group("API Keys and settings")
@@ -208,6 +117,11 @@ def get_parser(default_config_files, git_root):
type=str,
help="Set the reasoning_effort API parameter (default: not set)",
)
group.add_argument(
"--thinking-tokens",
type=int,
help="Set the thinking token budget for models that support it (default: not set)",
)
group.add_argument(
"--verify-ssl",
action=argparse.BooleanOptionalAction,
@@ -813,6 +727,24 @@ def get_parser(default_config_files, git_root):
default=False,
help="Enable/disable multi-line input mode with Meta-Enter to submit (default: False)",
)
group.add_argument(
"--notifications",
action=argparse.BooleanOptionalAction,
default=False,
help=(
"Enable/disable terminal bell notifications when LLM responses are ready (default:"
" False)"
),
)
group.add_argument(
"--notifications-command",
metavar="COMMAND",
default=None,
help=(
"Specify a command to run for notifications instead of the terminal bell. If not"
" specified, a default command for your OS may be used."
),
)
group.add_argument(
"--detect-urls",
action=argparse.BooleanOptionalAction,
@@ -823,12 +755,11 @@ def get_parser(default_config_files, git_root):
"--editor",
help="Specify which editor to use for the /editor command",
)
group.add_argument(
"--install-tree-sitter-language-pack",
action="store_true",
help="Install the tree_sitter_language_pack (experimental)",
default=False,
)

##########
group = parser.add_argument_group("Deprecated model settings")
# Add deprecated model shortcut arguments
add_deprecated_model_args(parser, group)

return parser

11 changes: 7 additions & 4 deletions aider/args_formatter.py
Original file line number Diff line number Diff line change
@@ -148,11 +148,14 @@ def _format_action(self, action):
parts.append(f"#{switch}: xxx")
parts.append("## Specify multiple values like this:")
parts.append(f"#{switch}:")
parts.append(f"# - xxx")
parts.append(f"# - yyy")
parts.append(f"# - zzz")
parts.append("# - xxx")
parts.append("# - yyy")
parts.append("# - zzz")
else:
parts.append(f"#{switch}: xxx\n")
if switch.endswith("color"):
parts.append(f'#{switch}: "xxx"\n')
else:
parts.append(f"#{switch}: xxx\n")

###
# parts.append(str(action))
Loading