Compare commits

...

48 Commits

Author SHA1 Message Date
Paul Gauthier
b9a80f9c8c set version to 0.81.1.dev 2025-04-04 22:02:37 +13:00
Paul Gauthier
980f673ce2 version bump to 0.81.0 2025-04-04 22:02:34 +13:00
Paul Gauthier
55767a0003 copy 2025-04-04 21:56:25 +13:00
Paul Gauthier
fb44bebe40 copy 2025-04-04 21:53:47 +13:00
Paul Gauthier (aider)
b79f072499 feat: Add alias "quasar" for openrouter/openrouter/quasar-alpha 2025-04-04 21:53:12 +13:00
Paul Gauthier (aider)
d65a2e8b51 fix: Exclude double quotes from detected URLs 2025-04-04 21:48:17 +13:00
Paul Gauthier (aider)
e0b42d51db fix: Do not retry litellm.APIError for insufficient credits. 2025-04-04 21:45:56 +13:00
Paul Gauthier (aider)
c057dc9466 Feat: Add model metadata for openrouter/openrouter/quasar-alpha 2025-04-04 21:43:19 +13:00
Paul Gauthier (aider)
fff53a94d3 fix: Import offer_openrouter_oauth from aider/onboarding.py 2025-04-04 21:41:40 +13:00
Paul Gauthier (aider)
12beedd0a6 style: Run linter to fix line lengths and formatting issues 2025-04-04 21:40:47 +13:00
Paul Gauthier (aider)
80f60a7394 feat: Offer OpenRouter OAuth if model specified but API key is missing 2025-04-04 21:40:41 +13:00
Paul Gauthier
2359348505 copy 2025-04-04 21:39:47 +13:00
Paul Gauthier
63e3e06a8c copy 2025-04-04 18:53:12 +13:00
Paul Gauthier
dca92b580c add openrouter/openrouter/quasar-alpha 2025-04-04 18:52:59 +13:00
Paul Gauthier
24e2960092 add openrouter/openrouter/quasar-alpha 2025-04-04 18:52:16 +13:00
Paul Gauthier (aider)
be1a52c5c1 feat: Read highlight model from query string 2025-04-04 16:11:54 +13:00
Paul Gauthier
8a34a6c8f4 set version to 0.80.5.dev 2025-04-04 15:34:08 +13:00
Paul Gauthier
7924ea9bb9 version bump to 0.80.4 2025-04-04 15:34:04 +13:00
Paul Gauthier
a3a17ae792 copy 2025-04-04 15:31:04 +13:00
Paul Gauthier
f8801d811b feat: Remove max_tokens from deepseek model settings 2025-04-04 15:25:36 +13:00
Paul Gauthier
425284ac62 copy 2025-04-04 15:09:08 +13:00
Paul Gauthier
4872cdf905 copy 2025-04-04 15:08:21 +13:00
Paul Gauthier
88cd81c692 set version to 0.80.4.dev 2025-04-04 08:30:42 +13:00
Paul Gauthier
d45ecd0800 version bump to 0.80.3 2025-04-04 08:30:39 +13:00
Paul Gauthier
4bfcef60f4 copy 2025-04-04 07:58:59 +13:00
Paul Gauthier
e9b7e933f5 copy 2025-04-04 07:54:07 +13:00
Paul Gauthier
e5301cef49 copy 2025-04-04 07:52:16 +13:00
Paul Gauthier
01ca552174 copy 2025-04-04 07:49:36 +13:00
Paul Gauthier
4529d73bf3 feat: Add model metadata for openrouter/google/gemini-2.0-flash-exp:free 2025-04-03 08:43:19 +13:00
Paul Gauthier
0798906a51 Merge branch 'main' into gemini-weak-flash 2025-04-03 08:34:41 +13:00
Paul Gauthier
8547c24dac set version to 0.80.3.dev 2025-04-03 08:33:40 +13:00
Paul Gauthier
0e1e1aae2e version bump to 0.80.2 2025-04-03 08:33:36 +13:00
Paul Gauthier (aider)
9cc31e4087 feat: Configure weak models for Gemini 2.5 Pro 2025-04-03 08:12:27 +13:00
Paul Gauthier
e9c7555bb9 chore: Add TODO comment for Gemini 2.5 Pro models 2025-04-03 08:12:20 +13:00
Paul Gauthier
6f897fec59 copy 2025-04-03 08:10:13 +13:00
Paul Gauthier
8c3d77f4c7 bump deps to pickup https://github.com/BerriAI/litellm/pull/9667 2025-04-03 08:07:30 +13:00
Paul Gauthier
f9b60d83ac copy 2025-04-02 20:15:37 +13:00
Paul Gauthier (aider)
3992681b84 ci: Add Windows workflow to check PyPI version 2025-04-01 21:19:14 +13:00
Paul Gauthier
340bd78259 Revert "ci: Add Windows to check_pypi_version matrix and improve compatibility"
This reverts commit 12a46275a2.
2025-04-01 21:18:31 +13:00
Paul Gauthier (aider)
12a46275a2 ci: Add Windows to check_pypi_version matrix and improve compatibility 2025-04-01 21:17:28 +13:00
Paul Gauthier
b56234f1c9 copy 2025-04-01 21:15:25 +13:00
Paul Gauthier (aider)
60859ec2b9 ci: Fix latest tag detection to exclude dev tags 2025-04-01 21:14:24 +13:00
Paul Gauthier
0a840860f1 docs: Add comment explaining PyPI check workflow purpose 2025-04-01 21:14:17 +13:00
Paul Gauthier (aider)
cebae18dd6 ci: Correct version extraction in check_pypi_version workflow 2025-04-01 21:12:24 +13:00
Paul Gauthier (aider)
9c9c6b6591 ci: Improve robustness of aider version check in CI 2025-04-01 21:10:36 +13:00
Paul Gauthier (aider)
ca0ffc66d1 ci: Run check_pypi_version job across Python 3.9-3.12 2025-04-01 21:08:17 +13:00
Paul Gauthier (aider)
b0623f04fe ci: Add GitHub Action to verify PyPI version matches latest tag 2025-04-01 21:03:20 +13:00
Paul Gauthier
2dec862ea6 copy 2025-04-01 17:08:27 +13:00
29 changed files with 1146 additions and 784 deletions

View File

@@ -0,0 +1,86 @@
name: Check PyPI Version
# Check to be sure `pip install aider-chat` installs the most recently published version.
# If dependencies get yanked, it may render the latest version uninstallable.
# See https://github.com/Aider-AI/aider/issues/3699 for example.
on:
schedule:
# Run once a day at midnight UTC
- cron: '0 0 * * *'
workflow_dispatch: # Allows manual triggering
jobs:
check_version:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12"]
steps:
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install aider-chat
run: pip install aider-chat
- name: Get installed aider version
id: installed_version
run: |
set -x # Enable debugging output
aider_version_output=$(aider --version)
if [ $? -ne 0 ]; then
echo "Error: 'aider --version' command failed."
exit 1
fi
echo "Raw aider --version output: $aider_version_output"
# Extract version number (format X.Y.Z)
version_num=$(echo "$aider_version_output" | grep -oP '\d+\.\d+\.\d+')
# Check if grep found anything
if [ -z "$version_num" ]; then
echo "Error: Could not extract version number using grep -oP '\d+\.\d+\.\d+' from output: $aider_version_output"
exit 1
fi
echo "Extracted version number: $version_num"
echo "version=$version_num" >> $GITHUB_OUTPUT
- name: Check out code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for all tags
- name: Get latest tag
id: latest_tag
run: |
set -x # Enable debugging output
# Fetch all tags from remote just in case
git fetch --tags origin main
# Get the latest tag that strictly matches vX.Y.Z (no suffixes like .dev)
# List all tags, sort by version descending, filter for exact pattern, take the first one
latest_tag=$(git tag --sort=-v:refname | grep -P '^v\d+\.\d+\.\d+$' | head -n 1)
if [ -z "$latest_tag" ]; then
echo "Error: Could not find any tags matching the pattern '^v\d+\.\d+\.\d+$'"
exit 1
fi
echo "Latest non-dev tag: $latest_tag"
# Remove 'v' prefix for comparison
tag_num=${latest_tag#v}
echo "Extracted tag number: $tag_num"
echo "tag=$tag_num" >> $GITHUB_OUTPUT
- name: Compare versions
run: |
echo "Installed version: ${{ steps.installed_version.outputs.version }}"
echo "Latest tag version: ${{ steps.latest_tag.outputs.tag }}"
if [ "${{ steps.installed_version.outputs.version }}" != "${{ steps.latest_tag.outputs.tag }}" ]; then
echo "Error: Installed aider version (${{ steps.installed_version.outputs.version }}) does not match the latest tag (${{ steps.latest_tag.outputs.tag }})."
exit 1
fi
echo "Versions match."

View File

@@ -0,0 +1,90 @@
name: Windows Check PyPI Version
# Check to be sure `pip install aider-chat` installs the most recently published version on Windows.
# If dependencies get yanked, it may render the latest version uninstallable.
# See https://github.com/Aider-AI/aider/issues/3699 for example.
on:
schedule:
# Run once a day at 1 AM UTC (offset from Ubuntu check)
- cron: '0 1 * * *'
workflow_dispatch: # Allows manual triggering
jobs:
check_version:
runs-on: windows-latest
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12"]
defaults:
run:
shell: pwsh # Use PowerShell for all run steps
steps:
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install aider-chat
run: pip install aider-chat
- name: Get installed aider version
id: installed_version
run: |
Write-Host "Running 'aider --version'..."
$aider_version_output = aider --version
if ($LASTEXITCODE -ne 0) {
Write-Error "Error: 'aider --version' command failed."
exit 1
}
Write-Host "Raw aider --version output: $aider_version_output"
# Extract version number (format X.Y.Z) using PowerShell regex
$match = [regex]::Match($aider_version_output, '\d+\.\d+\.\d+')
if (-not $match.Success) {
Write-Error "Error: Could not extract version number using regex '\d+\.\d+\.\d+' from output: $aider_version_output"
exit 1
}
$version_num = $match.Value
Write-Host "Extracted version number: $version_num"
echo "version=$version_num" >> $env:GITHUB_OUTPUT
- name: Check out code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for all tags
- name: Get latest tag
id: latest_tag
run: |
Write-Host "Fetching tags..."
# Fetch all tags from remote just in case
git fetch --tags origin main
Write-Host "Getting latest non-dev tag..."
# Get the latest tag that strictly matches vX.Y.Z (no suffixes like .dev)
# List all tags, sort by version descending, filter for exact pattern, take the first one
$latest_tag = (git tag --sort=-v:refname | Select-String -Pattern '^v\d+\.\d+\.\d+$' | Select-Object -First 1).Line
if (-not $latest_tag) {
Write-Error "Error: Could not find any tags matching the pattern '^v\d+\.\d+\.\d+$'"
exit 1
}
Write-Host "Latest non-dev tag: $latest_tag"
# Remove 'v' prefix for comparison
$tag_num = $latest_tag.Substring(1)
Write-Host "Extracted tag number: $tag_num"
echo "tag=$tag_num" >> $env:GITHUB_OUTPUT
- name: Compare versions
run: |
Write-Host "Installed version: ${{ steps.installed_version.outputs.version }}"
Write-Host "Latest tag version: ${{ steps.latest_tag.outputs.tag }}"
if ("${{ steps.installed_version.outputs.version }}" -ne "${{ steps.latest_tag.outputs.tag }}") {
Write-Error "Error: Installed aider version (${{ steps.installed_version.outputs.version }}) does not match the latest tag (${{ steps.latest_tag.outputs.tag }})."
exit 1
}
Write-Host "Versions match."

View File

@@ -1,10 +1,32 @@
# Release history
### Aider v0.81.0
- Added support for the `openrouter/openrouter/quasar-alpha` model.
- Run with `aider --model quasar`
- Offer OpenRouter OAuth authentication if an OpenRouter model is specified but the API key is missing.
- Prevent retrying API calls when the provider reports insufficient credits.
- Improve URL detection to exclude trailing double quotes.
- Aider wrote 86% of the code in this release.
### Aider v0.80.4
- Bumped deps to pickup litellm change to properly display the root cause of OpenRouter "choices" errors.
### Aider v0.80.3
- Improve error message for OpenRouter API connection issues to mention potential rate limiting or upstream provider issues.
- Configure weak models (`gemini/gemini-2.0-flash` and `openrouter/google/gemini-2.0-flash-exp:free`) for Gemini 2.5 Pro models.
- Add model metadata for `openrouter/google/gemini-2.0-flash-exp:free`.
### Aider v0.80.2
- Bumped deps.
### Aider v0.80.1
- Updated deps for yanked fsspec and aiohttp packages #3699
- Removed redundant dependency check during OpenRouter OAuth flow, by Claudia Pellegrino.
- Aider wrote 0% of the code in this release.
### Aider v0.80.0

View File

@@ -1,6 +1,6 @@
from packaging import version
__version__ = "0.80.2.dev"
__version__ = "0.81.1.dev"
safe_version = __version__
try:

View File

@@ -922,7 +922,8 @@ class Coder:
else:
self.io.tool_error(text)
url_pattern = re.compile(r"(https?://[^\s/$.?#].[^\s]*)")
# Exclude double quotes from the matched URL characters
url_pattern = re.compile(r'(https?://[^\s/$.?#].[^\s"]*)')
urls = list(set(url_pattern.findall(text))) # Use set to remove duplicates
for url in urls:
url = url.rstrip(".',\"")
@@ -934,7 +935,8 @@ class Coder:
if not self.detect_urls:
return inp
url_pattern = re.compile(r"(https?://[^\s/$.?#].[^\s]*[^\s,.])")
# Exclude double quotes from the matched URL characters
url_pattern = re.compile(r'(https?://[^\s/$.?#].[^\s"]*[^\s,.])')
urls = list(set(url_pattern.findall(inp))) # Use set to remove duplicates
group = ConfirmGroup(urls)
for url in urls:

View File

@@ -85,6 +85,23 @@ class LiteLLMExceptions:
return ExInfo("APIConnectionError", False, "You need to: pip install boto3")
if "OpenrouterException" in str(ex) and "'choices'" in str(ex):
return ExInfo(
"APIConnectionError", True, "The OpenRouter API provider is down or overloaded."
"APIConnectionError",
True,
(
"OpenRouter or the upstream API provider is down, overloaded or rate"
" limiting your requests."
),
)
# Check for specific non-retryable APIError cases like insufficient credits
if ex.__class__ is litellm.APIError:
err_str = str(ex).lower()
if "insufficient credits" in err_str and '"code":402' in err_str:
return ExInfo(
"APIError",
False,
"Insufficient credits with the API provider. Please add credits.",
)
# Fall through to default APIError handling if not the specific credits error
return self.exceptions.get(ex.__class__, ExInfo(None, None, None))

View File

@@ -30,7 +30,7 @@ from aider.history import ChatSummary
from aider.io import InputOutput
from aider.llm import litellm # noqa: F401; properly init litellm on launch
from aider.models import ModelSettings
from aider.onboarding import select_default_model
from aider.onboarding import offer_openrouter_oauth, select_default_model
from aider.repo import ANY_GIT_ERROR, GitRepo
from aider.report import report_uncaught_exceptions
from aider.versioncheck import check_version, install_from_main_branch, install_upgrade
@@ -765,9 +765,48 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
selected_model_name = select_default_model(args, io, analytics)
if not selected_model_name:
# Error message and analytics event are handled within select_default_model
# It might have already offered OAuth if no model/keys were found.
# If it failed here, we exit.
return 1
args.model = selected_model_name # Update args with the selected model
# Check if an OpenRouter model was selected/specified but the key is missing
if args.model.startswith("openrouter/") and not os.environ.get("OPENROUTER_API_KEY"):
io.tool_warning(
f"The specified model '{args.model}' requires an OpenRouter API key, which was not"
" found."
)
# Attempt OAuth flow because the specific model needs it
if offer_openrouter_oauth(io, analytics):
# OAuth succeeded, the key should now be in os.environ.
# Check if the key is now present after the flow.
if os.environ.get("OPENROUTER_API_KEY"):
io.tool_output(
"OpenRouter successfully connected."
) # Inform user connection worked
else:
# This case should ideally not happen if offer_openrouter_oauth succeeded
# but check defensively.
io.tool_error(
"OpenRouter authentication seemed successful, but the key is still missing."
)
analytics.event(
"exit",
reason="OpenRouter key missing after successful OAuth for specified model",
)
return 1
else:
# OAuth failed or was declined by the user
io.tool_error(
f"Unable to proceed without an OpenRouter API key for model '{args.model}'."
)
io.offer_url(urls.models_and_keys, "Open documentation URL for more info?")
analytics.event(
"exit",
reason="OpenRouter key missing for specified model and OAuth failed/declined",
)
return 1
main_model = models.Model(
args.model,
weak_model=args.weak_model,
@@ -1217,4 +1256,3 @@ def load_slow_imports(swallow=True):
if __name__ == "__main__":
status = main()
sys.exit(status)

View File

@@ -88,8 +88,9 @@ MODEL_ALIASES = {
"3": "gpt-3.5-turbo",
# Other models
"deepseek": "deepseek/deepseek-chat",
"r1": "deepseek/deepseek-reasoner",
"flash": "gemini/gemini-2.0-flash-exp",
"quasar": "openrouter/openrouter/quasar-alpha",
"r1": "deepseek/deepseek-reasoner",
"gemini-2.5-pro": "gemini/gemini-2.5-pro-exp-03-25",
"gemini": "gemini/gemini-2.5-pro-exp-03-25",
}

View File

@@ -156,6 +156,18 @@
"supports_system_messages": true,
"supports_response_schema": true
},
"openrouter/openrouter/quasar-alpha": {
"max_input_tokens": 1000000,
"max_output_tokens": 32000,
"input_cost_per_token": 0.0,
"output_cost_per_token": 0.0,
"litellm_provider": "openrouter",
"mode": "chat",
"supports_vision": true,
"supports_function_calling": true,
"supports_system_messages": true,
"supports_prompt_caching": true
},
"openrouter/openai/gpt-4o-mini": {
"max_tokens": 16384,
"max_input_tokens": 128000,
@@ -377,4 +389,23 @@
"supports_tool_choice": true,
"source": "https://cloud.google.com/vertex-ai/generative-ai/pricing"
},
"openrouter/google/gemini-2.0-flash-exp:free": {
"max_tokens": 8192,
"max_input_tokens": 1048576,
"max_output_tokens": 8192,
"max_images_per_prompt": 3000,
"max_videos_per_prompt": 10,
"max_video_length": 1,
"max_audio_length_hours": 8.4,
"max_audio_per_prompt": 1,
"max_pdf_size_mb": 30,
"litellm_provider": "openrouter",
"mode": "chat",
"supports_system_messages": true,
"supports_function_calling": true,
"supports_vision": true,
"supports_response_schema": true,
"supports_audio_output": true,
"supports_tool_choice": true
},
}

View File

@@ -589,8 +589,6 @@
weak_model_name: openrouter/deepseek/deepseek-chat-v3-0324:free
use_repo_map: true
examples_as_sys_msg: true
extra_params:
max_tokens: 131072
caches_by_default: true
use_temperature: false
editor_model_name: openrouter/deepseek/deepseek-chat-v3-0324:free
@@ -950,15 +948,24 @@
- name: openrouter/google/gemma-3-27b-it
use_system_prompt: false
- name: gemini/gemini-2.5-pro-exp-03-25
edit_format: diff-fenced
use_repo_map: true
weak_model_name: gemini/gemini-2.0-flash
- name: openrouter/google/gemini-2.5-pro-exp-03-25:free
edit_format: diff-fenced
use_repo_map: true
weak_model_name: openrouter/google/gemini-2.0-flash-exp:free
- name: vertex_ai/gemini-2.5-pro-exp-03-25
edit_format: diff-fenced
use_repo_map: true
# Need metadata for this one...
#weak_model_name: vertex_ai/gemini-2.0-flash
- name: openrouter/openrouter/quasar-alpha
use_repo_map: true
edit_format: diff
examples_as_sys_msg: true

View File

@@ -24,11 +24,33 @@ cog.out(text)
]]]-->
### Aider v0.81.0
- Added support for the `openrouter/openrouter/quasar-alpha` model.
- Run with `aider --model quasar`
- Offer OpenRouter OAuth authentication if an OpenRouter model is specified but the API key is missing.
- Prevent retrying API calls when the provider reports insufficient credits.
- Improve URL detection to exclude trailing double quotes.
- Aider wrote 86% of the code in this release.
### Aider v0.80.4
- Bumped deps to pickup litellm change to properly display the root cause of OpenRouter "choices" errors.
### Aider v0.80.3
- Improve error message for OpenRouter API connection issues to mention potential rate limiting or upstream provider issues.
- Configure weak models (`gemini/gemini-2.0-flash` and `openrouter/google/gemini-2.0-flash-exp:free`) for Gemini 2.5 Pro models.
- Add model metadata for `openrouter/google/gemini-2.0-flash-exp:free`.
### Aider v0.80.2
- Bumped deps.
### Aider v0.80.1
- Updated deps for yanked fsspec and aiohttp packages #3699
- Removed redundant dependency check during OpenRouter OAuth flow, by Claudia Pellegrino.
- Aider wrote 0% of the code in this release.
### Aider v0.80.0

View File

@@ -857,4 +857,30 @@
date: 2025-03-29
versions: 0.79.3.dev
seconds_per_case: 10.3
total_cost: 19.7416
total_cost: 19.7416
- dirname: 2025-04-04-02-57-25--qalpha-diff-exsys
test_cases: 225
model: Quasar Alpha
edit_format: diff
commit_hash: 8a34a6c-dirty
pass_rate_1: 21.8
pass_rate_2: 54.7
pass_num_1: 49
pass_num_2: 123
percent_cases_well_formed: 98.2
error_outputs: 4
num_malformed_responses: 4
num_with_malformed_responses: 4
user_asks: 187
lazy_comments: 0
syntax_errors: 0
indentation_errors: 0
exhausted_context_windows: 0
test_timeouts: 4
total_tests: 225
command: aider --model openrouter/openrouter/quasar-alpha
date: 2025-04-04
versions: 0.80.5.dev
seconds_per_case: 14.8
total_cost: 0.0000

View File

@@ -4,7 +4,11 @@ document.addEventListener('DOMContentLoaded', function () {
const redDiagonalPattern = pattern.draw('diagonal', 'rgba(255, 99, 132, 0.2)');
let displayedData = [];
const HIGHLIGHT_MODEL = '{{ highlight_model | default: "no no no" }}';
// Get highlight model from query string or Jekyll variable
const urlParams = new URLSearchParams(window.location.search);
const queryHighlight = urlParams.get('highlight');
const HIGHLIGHT_MODEL = queryHighlight || '{{ highlight_model | default: "no no no" }}';
var leaderboardData = {
labels: [],
datasets: [{

File diff suppressed because it is too large Load Diff

View File

@@ -612,6 +612,7 @@ cog.out("```\n")
- name: gemini/gemini-2.5-pro-exp-03-25
edit_format: diff-fenced
weak_model_name: gemini/gemini-2.0-flash
use_repo_map: true
- name: gemini/gemini-exp-1114
@@ -962,8 +963,6 @@ cog.out("```\n")
weak_model_name: openrouter/deepseek/deepseek-chat-v3-0324:free
use_repo_map: true
examples_as_sys_msg: true
extra_params:
max_tokens: 131072
caches_by_default: true
use_temperature: false
editor_model_name: openrouter/deepseek/deepseek-r1:free
@@ -1022,6 +1021,7 @@ cog.out("```\n")
- name: openrouter/google/gemini-2.5-pro-exp-03-25:free
edit_format: diff-fenced
weak_model_name: openrouter/google/gemini-2.0-flash-exp:free
use_repo_map: true
- name: openrouter/google/gemma-3-27b-it
@@ -1097,6 +1097,11 @@ cog.out("```\n")
accepts_settings:
- reasoning_effort
- name: openrouter/openrouter/quasar-alpha
edit_format: diff
use_repo_map: true
examples_as_sys_msg: true
- name: openrouter/qwen/qwen-2.5-coder-32b-instruct
edit_format: diff
weak_model_name: openrouter/qwen/qwen-2.5-coder-32b-instruct

View File

@@ -84,6 +84,7 @@ for alias, model in sorted(MODEL_ALIASES.items()):
- `gemini-2.5-pro`: gemini/gemini-2.5-pro-exp-03-25
- `haiku`: claude-3-5-haiku-20241022
- `opus`: claude-3-opus-20240229
- `quasar`: openrouter/openrouter/quasar-alpha
- `r1`: deepseek/deepseek-reasoner
- `sonnet`: anthropic/claude-3-7-sonnet-20250219
<!--[[[end]]]-->

View File

@@ -264,9 +264,17 @@ tr:hover { background-color: #f5f5f5; }
</style>
<table>
<tr><th>Model Name</th><th class='right'>Total Tokens</th><th class='right'>Percent</th></tr>
<tr><td>gemini/gemini-2.5-pro-exp-03-25</td><td class='right'>1,589,885</td><td class='right'>79.3%</td></tr>
<tr><td>anthropic/claude-3-7-sonnet-20250219</td><td class='right'>416,047</td><td class='right'>20.7%</td></tr>
<tr><td>gemini/gemini-2.5-pro-exp-03-25</td><td class='right'>900,070</td><td class='right'>83.0%</td></tr>
<tr><td>anthropic/claude-3-7-sonnet-20250219</td><td class='right'>144,371</td><td class='right'>13.3%</td></tr>
<tr><td>openrouter/openrouter/quasar-alpha</td><td class='right'>25,535</td><td class='right'>2.4%</td></tr>
<tr><td>openrouter/deepseek/deepseek-chat-v3-0324:free</td><td class='right'>11,324</td><td class='right'>1.0%</td></tr>
<tr><td>openrouter/REDACTED</td><td class='right'>1,755</td><td class='right'>0.2%</td></tr>
<tr><td>vertex_ai/REDACTED</td><td class='right'>1,739</td><td class='right'>0.2%</td></tr>
</table>
{: .note :}
Some models show as REDACTED, because they are new or unpopular models.
Aider's analytics only records the names of "well known" LLMs.
<!--[[[end]]]-->
## How are the "aider wrote xx% of code" stats computed?

View File

@@ -36,17 +36,16 @@ If you can find and share that file in a
[GitHub issue](https://github.com/Aider-AI/aider/issues),
then it may be possible to add repo map support.
If aider doesn't support linting, it will be complicated to
add linting and repo map support.
That is because aider relies on
[py-tree-sitter-languages](https://github.com/grantjenks/py-tree-sitter-languages)
If aider doesn't already support linting your language,
it will be more complicated to add support.
Aider relies on
[tree-sitter-language-pack](https://github.com/Goldziher/tree-sitter-language-pack)
to provide pre-packaged versions of tree-sitter
parsers for many languages.
Aider needs to be easy for users to install in many environments,
and it is probably too complex to add dependencies on
additional individual tree-sitter parsers.
language parsers.
This makes it easy for users to install aider in many diverse environments.
You probably need to work with that project to get your language
supported, which will easily allow aider to lint that language.
For repo-map support, you will also need to find or create a `tags.scm` file.
<!--[[[cog
from aider.repomap import get_supported_languages_md

View File

@@ -124,6 +124,6 @@ mod_dates = [get_last_modified_date(file) for file in files]
latest_mod_date = max(mod_dates)
cog.out(f"{latest_mod_date.strftime('%B %d, %Y.')}")
]]]-->
March 31, 2025.
April 04, 2025.
<!--[[[end]]]-->
</p>

View File

@@ -71,6 +71,7 @@ cog.out(model_list)
- claude-3-sonnet-20240229
- codestral/codestral-2405
- codestral/codestral-latest
- databricks/databricks-claude-3-7-sonnet
- deepseek/deepseek-chat
- deepseek/deepseek-coder
- deepseek/deepseek-reasoner

View File

@@ -69,7 +69,7 @@ cog.out(text)
]]]-->
<a href="https://github.com/Aider-AI/aider" class="github-badge badge-stars" title="Total number of GitHub stars the Aider project has received">
<span class="badge-label">⭐ GitHub Stars</span>
<span class="badge-value">30K</span>
<span class="badge-value">31K</span>
</a>
<a href="https://pypi.org/project/aider-chat/" class="github-badge badge-installs" title="Total number of installations via pip from PyPI">
<span class="badge-label">📦 Installs</span>

View File

@@ -82,7 +82,7 @@ You can run `./benchmark/benchmark.py --help` for a list of all the arguments, b
- `--threads` specifies how many exercises to benchmark in parallel. Start with a single thread if you are working out the kinks on your benchmarking setup or working with a new model, etc. Once you are getting reliable results, you can speed up the process by running with more threads. 10 works well against the OpenAI APIs.
- `--num-tests` specifies how many of the tests to run before stopping. This is another way to start gently as you debug your benchmarking setup.
- `--keywords` filters the tests to run to only the ones whose name match the supplied argument (similar to `pytest -k xxxx`).
- `--read-model-settings=<filename.yml>` specify any other configurations in the aider yml format, see here: https://aider.chat/docs/config/aider_conf.html
- `--read-model-settings=<filename.yml>` specify model settings, see here: https://aider.chat/docs/config/adv-model-settings.html#model-settings
### Benchmark report

View File

@@ -4,7 +4,7 @@ aiohappyeyeballs==2.6.1
# via
# -c requirements/common-constraints.txt
# aiohttp
aiohttp==3.11.12
aiohttp==3.11.16
# via
# -c requirements/common-constraints.txt
# litellm
@@ -143,7 +143,7 @@ jiter==0.9.0
# via
# -c requirements/common-constraints.txt
# openai
json5==0.10.0
json5==0.12.0
# via
# -c requirements/common-constraints.txt
# -r requirements/requirements.in
@@ -156,7 +156,7 @@ jsonschema-specifications==2024.10.1
# via
# -c requirements/common-constraints.txt
# jsonschema
litellm==1.65.0
litellm==1.65.3
# via
# -c requirements/common-constraints.txt
# -r requirements/requirements.in
@@ -184,7 +184,7 @@ monotonic==1.6
# via
# -c requirements/common-constraints.txt
# posthog
multidict==6.3.0
multidict==6.3.2
# via
# -c requirements/common-constraints.txt
# aiohttp
@@ -253,12 +253,12 @@ pycparser==2.22
# via
# -c requirements/common-constraints.txt
# cffi
pydantic==2.11.1
pydantic==2.11.2
# via
# -c requirements/common-constraints.txt
# litellm
# openai
pydantic-core==2.33.0
pydantic-core==2.33.1
# via
# -c requirements/common-constraints.txt
# pydantic
@@ -387,7 +387,7 @@ tree-sitter-yaml==0.7.0
# via
# -c requirements/common-constraints.txt
# tree-sitter-language-pack
typing-extensions==4.13.0
typing-extensions==4.13.1
# via
# -c requirements/common-constraints.txt
# anyio

View File

@@ -2,7 +2,7 @@
# uv pip compile --no-strip-extras --output-file=requirements/common-constraints.txt requirements/requirements.in requirements/requirements-browser.in requirements/requirements-dev.in requirements/requirements-help.in requirements/requirements-playwright.in
aiohappyeyeballs==2.6.1
# via aiohttp
aiohttp==3.11.12
aiohttp==3.11.16
# via
# huggingface-hub
# litellm
@@ -103,7 +103,7 @@ filetype==1.2.0
# via llama-index-core
flake8==7.2.0
# via -r requirements/requirements.in
fonttools==4.56.0
fonttools==4.57.0
# via matplotlib
frozenlist==1.5.0
# via
@@ -147,7 +147,7 @@ greenlet==3.1.1
# sqlalchemy
grep-ast==0.8.1
# via -r requirements/requirements.in
griffe==1.7.1
griffe==1.7.2
# via banks
grpcio==1.71.0
# via
@@ -201,7 +201,7 @@ joblib==1.4.2
# via
# nltk
# scikit-learn
json5==0.10.0
json5==0.12.0
# via -r requirements/requirements.in
jsonschema==4.23.0
# via
@@ -212,7 +212,7 @@ jsonschema-specifications==2024.10.1
# via jsonschema
kiwisolver==1.4.8
# via matplotlib
litellm==1.65.0
litellm==1.65.3
# via -r requirements/requirements.in
llama-index-core==0.12.26
# via
@@ -240,7 +240,7 @@ monotonic==1.6
# via posthog
mpmath==1.3.0
# via sympy
multidict==6.3.0
multidict==6.3.2
# via
# aiohttp
# yarl
@@ -360,13 +360,13 @@ pycodestyle==2.13.0
# via flake8
pycparser==2.22
# via cffi
pydantic==2.11.1
pydantic==2.11.2
# via
# banks
# litellm
# llama-index-core
# openai
pydantic-core==2.33.0
pydantic-core==2.33.1
# via pydantic
pydeck==0.9.1
# via streamlit
@@ -452,7 +452,7 @@ scipy==1.13.1
# sentence-transformers
semver==3.0.4
# via -r requirements/requirements-dev.in
sentence-transformers==4.0.1
sentence-transformers==4.0.2
# via llama-index-embeddings-huggingface
setuptools==78.1.0
# via pip-tools
@@ -479,11 +479,11 @@ soupsieve==2.6
# via beautifulsoup4
sqlalchemy[asyncio]==2.0.40
# via llama-index-core
streamlit==1.44.0
streamlit==1.44.1
# via -r requirements/requirements-browser.in
sympy==1.13.3
# via torch
tenacity==9.0.0
tenacity==9.1.2
# via
# llama-index-core
# streamlit
@@ -527,7 +527,7 @@ tree-sitter-yaml==0.7.0
# via tree-sitter-language-pack
typer==0.15.2
# via -r requirements/requirements-dev.in
typing-extensions==4.13.0
typing-extensions==4.13.1
# via
# altair
# anyio
@@ -558,7 +558,7 @@ urllib3==2.3.0
# via
# mixpanel
# requests
uv==0.6.11
uv==0.6.12
# via -r requirements/requirements-dev.in
virtualenv==20.30.0
# via pre-commit

View File

@@ -123,11 +123,11 @@ smmap==5.0.2
# via
# -c requirements/common-constraints.txt
# gitdb
streamlit==1.44.0
streamlit==1.44.1
# via
# -c requirements/common-constraints.txt
# -r requirements/requirements-browser.in
tenacity==9.0.0
tenacity==9.1.2
# via
# -c requirements/common-constraints.txt
# streamlit
@@ -139,7 +139,7 @@ tornado==6.4.2
# via
# -c requirements/common-constraints.txt
# streamlit
typing-extensions==4.13.0
typing-extensions==4.13.1
# via
# -c requirements/common-constraints.txt
# altair

View File

@@ -54,7 +54,7 @@ filelock==3.18.0
# via
# -c requirements/common-constraints.txt
# virtualenv
fonttools==4.56.0
fonttools==4.57.0
# via
# -c requirements/common-constraints.txt
# matplotlib
@@ -285,7 +285,7 @@ typer==0.15.2
# via
# -c requirements/common-constraints.txt
# -r requirements/requirements-dev.in
typing-extensions==4.13.0
typing-extensions==4.13.1
# via
# -c requirements/common-constraints.txt
# typer
@@ -297,7 +297,7 @@ urllib3==2.3.0
# via
# -c requirements/common-constraints.txt
# requests
uv==0.6.11
uv==0.6.12
# via
# -c requirements/common-constraints.txt
# -r requirements/requirements-dev.in

View File

@@ -4,7 +4,7 @@ aiohappyeyeballs==2.6.1
# via
# -c requirements/common-constraints.txt
# aiohttp
aiohttp==3.11.12
aiohttp==3.11.16
# via
# -c requirements/common-constraints.txt
# huggingface-hub
@@ -85,7 +85,7 @@ greenlet==3.1.1
# via
# -c requirements/common-constraints.txt
# sqlalchemy
griffe==1.7.1
griffe==1.7.2
# via
# -c requirements/common-constraints.txt
# banks
@@ -146,7 +146,7 @@ mpmath==1.3.0
# via
# -c requirements/common-constraints.txt
# sympy
multidict==6.3.0
multidict==6.3.2
# via
# -c requirements/common-constraints.txt
# aiohttp
@@ -196,12 +196,12 @@ propcache==0.3.1
# -c requirements/common-constraints.txt
# aiohttp
# yarl
pydantic==2.11.1
pydantic==2.11.2
# via
# -c requirements/common-constraints.txt
# banks
# llama-index-core
pydantic-core==2.33.0
pydantic-core==2.33.1
# via
# -c requirements/common-constraints.txt
# pydantic
@@ -237,7 +237,7 @@ scipy==1.13.1
# -c requirements/common-constraints.txt
# scikit-learn
# sentence-transformers
sentence-transformers==4.0.1
sentence-transformers==4.0.2
# via
# -c requirements/common-constraints.txt
# llama-index-embeddings-huggingface
@@ -253,7 +253,7 @@ sympy==1.13.3
# via
# -c requirements/common-constraints.txt
# torch
tenacity==9.0.0
tenacity==9.1.2
# via
# -c requirements/common-constraints.txt
# llama-index-core
@@ -286,7 +286,7 @@ transformers==4.50.3
# via
# -c requirements/common-constraints.txt
# sentence-transformers
typing-extensions==4.13.0
typing-extensions==4.13.1
# via
# -c requirements/common-constraints.txt
# anyio

View File

@@ -12,7 +12,7 @@ pyee==12.1.1
# via
# -c requirements/common-constraints.txt
# playwright
typing-extensions==4.13.0
typing-extensions==4.13.1
# via
# -c requirements/common-constraints.txt
# pyee

View File

@@ -79,4 +79,6 @@ def test_openrouter_error():
ex_info = ex.get_ex_info(openrouter_error)
assert ex_info.retry is True
assert "OpenRouter API provider is down" in ex_info.description
assert "OpenRouter" in ex_info.description
assert "overloaded" in ex_info.description
assert "rate" in ex_info.description