diff --git a/.github/workflows/check_pypi_version.yml b/.github/workflows/check_pypi_version.yml index ba99404d3..b383e87be 100644 --- a/.github/workflows/check_pypi_version.yml +++ b/.github/workflows/check_pypi_version.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.9", "3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12"] steps: - name: Set up Python ${{ matrix.python-version }} diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml new file mode 100644 index 000000000..5de58d77d --- /dev/null +++ b/.github/workflows/pre-commit.yml @@ -0,0 +1,48 @@ +--- +name: pre-commit +on: + pull_request: + push: + workflow_dispatch: +jobs: + pre-commit: + runs-on: ubuntu-latest + env: + RAW_LOG: pre-commit.log + CS_XML: pre-commit.xml + steps: + - run: sudo apt-get update && sudo apt-get install cppcheck uncrustify + if: false + - uses: actions/checkout@v4 + - run: python -m pip install pre-commit + - uses: actions/cache/restore@v4 + with: + path: ~/.cache/pre-commit/ + key: pre-commit-4|${{ env.pythonLocation }}|${{ hashFiles('.pre-commit-config.yaml') }} + - name: Run pre-commit hooks + env: + SKIP: no-commit-to-branch + run: | + set -o pipefail + pre-commit gc + pre-commit run --show-diff-on-failure --color=always --all-files | tee ${RAW_LOG} + - name: Convert Raw Log to Checkstyle format (launch action) + uses: mdeweerd/logToCheckStyle@v2025.1.1 + if: ${{ failure() }} + with: + in: ${{ env.RAW_LOG }} + # out: ${{ env.CS_XML }} + - uses: actions/cache/save@v4 + if: ${{ ! cancelled() }} + with: + path: ~/.cache/pre-commit/ + key: pre-commit-4|${{ env.pythonLocation }}|${{ hashFiles('.pre-commit-config.yaml') }} + - name: Provide log as artifact + uses: actions/upload-artifact@v4 + if: ${{ ! cancelled() }} + with: + name: precommit-logs + path: | + ${{ env.RAW_LOG }} + ${{ env.CS_XML }} + retention-days: 2 diff --git a/.github/workflows/ubuntu-tests.yml b/.github/workflows/ubuntu-tests.yml index 632c03757..753470af0 100644 --- a/.github/workflows/ubuntu-tests.yml +++ b/.github/workflows/ubuntu-tests.yml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.9", "3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12"] steps: - name: Check out repository diff --git a/.github/workflows/windows-tests.yml b/.github/workflows/windows-tests.yml index 21799563e..f79f84b66 100644 --- a/.github/workflows/windows-tests.yml +++ b/.github/workflows/windows-tests.yml @@ -25,7 +25,7 @@ jobs: runs-on: windows-latest strategy: matrix: - python-version: ["3.9", "3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12"] steps: - name: Check out repository diff --git a/.github/workflows/windows_check_pypi_version.yml b/.github/workflows/windows_check_pypi_version.yml index 960241326..6bd48fdf6 100644 --- a/.github/workflows/windows_check_pypi_version.yml +++ b/.github/workflows/windows_check_pypi_version.yml @@ -15,7 +15,7 @@ jobs: runs-on: windows-latest strategy: matrix: - python-version: ["3.9", "3.10", "3.11", "3.12"] + python-version: ["3.10", "3.11", "3.12"] defaults: run: shell: pwsh # Use PowerShell for all run steps diff --git a/.gitignore b/.gitignore index 8ad33fd3c..fd1fa9a4d 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,5 @@ aider/_version.py .venv/ .#* .gitattributes -tmp.benchmarks/ \ No newline at end of file +tmp.benchmarks/ +.docker_bash_history \ No newline at end of file diff --git a/HISTORY.md b/HISTORY.md index 99398aa22..d113d0adf 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,152 @@ # Release history +### Aider v0.86.0 + +- Expanded GPT-5 model support across family variants and providers (OpenAI, Azure, OpenRouter), including dated and chat/mini/nano variants. +- Aider wrote 88% of the code in this release. + +### Aider v0.85.5 + +- Enforced diff edit format for GPT-5 models. +- Added support for the reasoning_effort setting for GPT-5 models. +- Fixed model detection to correctly apply GPT-5 settings to versioned names (gpt-5 and gpt-5-2025-08-07). + +### Aider v0.85.4 + +- Added support for openai/gpt-5 +- Fixed analytics to support the latest PostHog SDK event-capture API. +- Disabled temperature when using GPT-5 models for more deterministic outputs. + +### Aider v0.85.3 + +- Bumped dependencies to pick up latest litellm==1.75.0. + +### Aider v0.85.2 + +- Added support for Grok-4 via `xai/grok-4` and `openrouter/x-ai/grok-4` model names. +- Added support for `gemini/gemini-2.5-flash-lite-preview-06-17` model, by Tamir Zahavi-Brunner. +- `/clear` now prints β€œAll chat history cleared.” so you know it worked, by Zexin Yuan. +- `/undo` output now shows only the first line of each commit message, making it easier to read. +- Fixed an issue where new settings for an existing model didn't replace the old ones, by Andrew Grigorev. +- Added support for `openrouter/moonshotai/kimi-k2` model, by Jack Harrington. + +### Aider v0.85.1 + +- Display model announcements with no-arg `/model` command. + +### Aider v0.85.0 + +- Support for Responses API models like o1-pro, o3-pro. +- Updated pricing for o3. +- Added support for new Gemini models including `gemini-2.5-pro`, `gemini-2.5-flash`, and `gemini-2.5-pro-preview-06-05` with thinking tokens support. +- Updated model aliases: `flash` now points to `gemini-2.5-flash` and `gemini` now points to `gemini-2.5-pro`. +- Added `--add-gitignore-files` flag to enable adding files listed in .gitignore to Aider's editing scope, by omarcinkonis. +- Added `--commit-language` option to specify the language for commit messages, by Kyosuke Takayama. +- Enhanced thinking tokens support: can now be disabled by setting to 0, and improved help text with examples. +- Added MATLAB language support for repository maps, by Matthew Tofano. +- Added support for OpenAI o3-pro model across multiple providers. +- Improved GitHub Copilot token handling with better validation and error messages, by Vincent Taverna and Sebastian Estrella. +- Fixed encoding issues in git diff output and LLM history logging. +- Enhanced commit message generation to use system prompt prefixes, by Luke Reeves. +- Improved inline code rendering in Rich markdown output, by Vamsi Talupula. +- Fixed Vertex AI model name prefixes in settings, by Wietse Venema. +- Improved `/read-only` command to resolve literal paths correctly, by Matteo Landi. +- Skip expensive file tracking operations when `--skip-sanity-check-repo` is enabled for better performance, by Makar Ivashko. +- Ensure pip is available before package installation. +- Auto-create parent directories for chat history files to prevent startup errors, by contributor. +- Fixed search block regex to accept optional closing tags when working with HTML content, by Mathis Beer. +- Co-authored-by attribution is now enabled by default for commit messages. +- Added Clojure language support for repository maps, by Garrett Hopper. +- Added custom PostHog analytics configuration options with `--analytics-posthog-host` and `--analytics-posthog-project-api-key` flags, by Vasil Markoukin. +- Optimized chat history summarization performance, by jayeshthk. +- Improved kebab-case identifier recognition in repository maps for better code analysis. +- Increased max tokens for Deepseek models to 65536 for better performance. +- Aider wrote 21% of the code in this release. + +### Aider v0.84.0 + +- Added support for new Claude models including the Sonnet 4 and Opus 4 series (e.g., `claude-sonnet-4-20250514`, +`claude-opus-4-20250514`) across various providers. The default `sonnet` and `opus` aliases were updated to these newer +versions. +- Added support for the `vertex_ai/gemini-2.5-flash-preview-05-20` model. +- Fixed OpenRouter token cost calculation for improved accuracy. +- Updated default OpenRouter models during onboarding to `deepseek/deepseek-r1:free` for the free tier and +`anthropic/claude-sonnet-4` for paid tiers. +- Automatically refresh GitHub Copilot tokens when used as OpenAI API keys, by Lih Chen. +- Aider wrote 79% of the code in this release. + +### Aider v0.83.2 + +- Bumped configargparse to 1.7.1 as 1.7 was pulled. +- Added shell tab completion for file path arguments (by saviour) and for `--edit-format`/`--editor-edit-format` options. +- Improved OpenRouter model metadata handling by introducing a local cache, increasing reliability and performance. +- The `/settings` command now displays detailed metadata for active main, editor, and weak models. +- Fixed an issue where files explicitly added via the command line were not correctly ignored if listed in `.gitignore`. +- Improved automatic commit messages by providing more context during their generation, by wangboxue. + +### Aider v0.83.1 + +- Improved user language detection by correctly normalizing hyphenated language codes (e.g., `en-US` to `en`) and enhancing the validation of locale results. +- Prevented Aider from instructing the LLM to reply in 'C' or 'POSIX' when these are detected as the system locale. +- Displayed a spinner with the model name when generating commit messages. + +### Aider v0.83.0 + +- Added support for `gemini-2.5-pro-preview-05-06` models. +- Added support for `qwen3-235b` models. +- Added repo-map support for OCaml and OCaml interface files, by Andrey Popp. +- Added a spinner animation while waiting for the LLM to start streaming its response. +- Updated the spinner animation to a Knight Rider style. +- Introduced `--attribute-co-authored-by` option to add co-author trailer to commit messages, by Andrew Grigorev. +- Updated Gemini model aliases (e.g., `gemini`, `gemini-2.5-pro`) to point to the `05-06` preview versions. +- Marked Gemini 2.5 Pro preview models as `overeager` by default. +- Commit message prompt specifies the user's language. +- Updated the default weak model for Gemini 2.5 Pro models to `gemini/gemini-2.5-flash-preview-04-17`. +- Corrected `gemini-2.5-pro-exp-03-25` model settings to reflect its lack of support for `thinking_budget`. +- Ensured model-specific system prompt prefixes are placed on a new line before the main system prompt. +- Added tracking of total tokens sent and received, now included in benchmark statistics. +- Automatically fetch model parameters (context window, pricing) for OpenRouter models directly from their website, by Stefan Hladnik. +- Enabled support for `thinking_tokens` and `reasoning_effort` parameters for OpenRouter models. +- Improved cost calculation using `litellm.completion_cost` where available. +- Added model settings for `openrouter/google/gemini-2.5-pro-preview-03-25`. +- Added `--disable-playwright` flag to prevent Playwright installation prompts and usage, by Andrew Grigorev. +- The `aider scrape` command-line tool will now use Playwright for web scraping if it is available, by Jon Keys. +- Fixed linter command execution on Windows by adopting `oslex` for argument quoting, by Titusz Pan. +- Improved cross-platform display of shell commands by using `oslex` for robust argument quoting, by Titusz Pan. +- Improved `/ask` mode to instruct the LLM to elide unchanging code in its responses. +- Ensured web scraping in the GUI also respects Playwright availability and the `--disable-playwright` flag. +- Improved display of filenames in the prompt header using rich Text formatting. +- Enabled `reasoning_effort` for Gemini 2.5 Flash models. +- Added a `--shell-completions` argument to generate shell completion scripts (e.g., for bash, zsh). +- Explicit `--attribute-author` or `--attribute-committer` flags now override the default behavior when `--attribute-co-authored-by` is used, allowing finer control over commit attribution, by Andrew Grigorev. +- Fixed an issue where read-only status of files might not be preserved correctly by some commands (e.g. `/drop` after adding a read-only file). +- The `aider-args` utility (or `python -m aider.args`) now defaults to printing a sample YAML configuration if no arguments are provided. +- Displayed token count progress and the name of the file or identifier being processed during repo map updates. +- Extended the waiting spinner to also show for non-streaming responses and further enhanced its animation with console width clipping, cursor hiding, and a more continuous appearance. +- Dropped support for Python 3.9. +- Aider wrote 55% of the code in this release. + +### Aider v0.82.3 + +- Add support for `gemini-2.5-flash-preview-04-17` models. +- Improved robustness of edit block parsing when filenames start with backticks or fences. +- Add new `udiff-simple` edit format, for Gemini 2.5 Pro. +- Update default weak/editor models for Gemini 2.5 Pro models to use `gemini-2.5-flash-preview-04-17`. +- Instruct models to reply in the user's detected system language. +- Fix parsing of diffs for newly created files (`--- /dev/null`). +- Add markdown syntax highlighting support when editing multi-line commit messages via `/commit`, by Kay Gosho. +- Set Gemini 2.5 Pro models to use the `overeager` prompt setting by default. +- Add common file types (`.svg`, `.pdf`) to the default list of ignored files for AI comment scanning (`--watch`). +- Skip scanning files larger than 1MB for AI comments (`--watch`). + +### Aider v0.82.2 + +- Fix editing shell files with diff-fenced, by zjy1412. +- Improve robustness of patch application by allowing multiple update/delete actions for the same file within a single response. +- Update prompts to instruct LLMs to consolidate all edits for a given file into a single block within the patch. + ### Aider v0.82.1 + - Added support for `o3` and `o4-mini` including provider-specific versions for OpenAI, OpenRouter, and Azure. - Added support for Azure specific `gpt-4.1` and `gpt-4.1-mini` models. - Disabled streaming for `o3` models since you need identity verification to stream. @@ -348,7 +494,7 @@ - [Aider works with LLM web chat UIs](https://aider.chat/docs/usage/copypaste.html). - New `--copy-paste` mode. - New `/copy-context` command. -- [Set API keys and other environment variables for all providers from command line or yaml conf file](https://aider.chat/docs/config/aider_conf.html#storing-llm-keys). +- [Set API keys and other environment variables for all providers from command line or YAML conf file](https://aider.chat/docs/config/aider_conf.html#storing-llm-keys). - New `--api-key provider=key` setting. - New `--set-env VAR=value` setting. - Added bash and zsh support to `--watch-files`. @@ -516,7 +662,7 @@ ### Aider v0.59.1 -- Check for obsolete `yes: true` in yaml config, show helpful error. +- Check for obsolete `yes: true` in YAML config, show helpful error. - Model settings for openrouter/anthropic/claude-3.5-sonnet:beta ### Aider v0.59.0 @@ -526,7 +672,7 @@ - Still auto-completes the full paths of the repo files like `/add`. - Now supports globs like `src/**/*.py` - Renamed `--yes` to `--yes-always`. - - Now uses `AIDER_YES_ALWAYS` env var and `yes-always:` yaml key. + - Now uses `AIDER_YES_ALWAYS` env var and `yes-always:` YAML key. - Existing YAML and .env files will need to be updated. - Can still abbreviate to `--yes` on the command line. - Config file now uses standard YAML list syntax with ` - list entries`, one per line. @@ -733,7 +879,7 @@ - Use `--map-refresh ` to configure. - Improved cost estimate logic for caching. - Improved editing performance on Jupyter Notebook `.ipynb` files. -- Show which config yaml file is loaded with `--verbose`. +- Show which config YAML file is loaded with `--verbose`. - Bumped dependency versions. - Bugfix: properly load `.aider.models.metadata.json` data. - Bugfix: Using `--msg /ask ...` caused an exception. diff --git a/README.md b/README.md index e9db1be80..c04b775f6 100644 --- a/README.md +++ b/README.md @@ -27,13 +27,13 @@ cog.out(text) GitHub Stars PyPI Downloads +src="https://img.shields.io/badge/πŸ“¦%20Installs-4.1M-2ecc71?style=flat-square&labelColor=555555"/> Tokens per week OpenRouter Ranking Singularity +src="https://img.shields.io/badge/πŸ”„%20Singularity-88%25-e74c3c?style=flat-square&labelColor=555555"/>

@@ -135,43 +135,46 @@ See the [installation instructions](https://aider.chat/docs/install.html) and [u ### Community & Resources - [LLM Leaderboards](https://aider.chat/docs/leaderboards/) - [GitHub Repository](https://github.com/Aider-AI/aider) -- [Discord Community](https://discord.gg/Tv2uQnR88V) +- [Discord Community](https://discord.gg/Y7X7bhMQFV) +- [Release notes](https://aider.chat/HISTORY.html) - [Blog](https://aider.chat/blog/) ## Kind Words From Users -- *"My life has changed this week. There's finally an AI coding tool that's good enough to keep up with me... Aider... It's going to rock your world."* β€” [Eric S. Raymond](https://x.com/esrtweet/status/1910809356381413593) -- *"The best free open source AI coding assistant."* β€” [IndyDevDan](https://youtu.be/YALpX8oOn78) -- *"The best AI coding assistant so far."* β€” [Matthew Berman](https://www.youtube.com/watch?v=df8afeb1FY8) -- *"Aider ... has easily quadrupled my coding productivity."* β€” [SOLAR_FIELDS](https://news.ycombinator.com/item?id=36212100) -- *"It's a cool workflow... Aider's ergonomics are perfect for me."* β€” [qup](https://news.ycombinator.com/item?id=38185326) -- *"It's really like having your senior developer live right in your Git repo - truly amazing!"* β€” [rappster](https://github.com/Aider-AI/aider/issues/124) -- *"What an amazing tool. It's incredible."* β€” [valyagolev](https://github.com/Aider-AI/aider/issues/6#issue-1722897858) -- *"Aider is such an astounding thing!"* β€” [cgrothaus](https://github.com/Aider-AI/aider/issues/82#issuecomment-1631876700) -- *"It was WAY faster than I would be getting off the ground and making the first few working versions."* β€” [Daniel Feldman](https://twitter.com/d_feldman/status/1662295077387923456) -- *"THANK YOU for Aider! It really feels like a glimpse into the future of coding."* β€” [derwiki](https://news.ycombinator.com/item?id=38205643) -- *"It's just amazing. It is freeing me to do things I felt were out my comfort zone before."* β€” [Dougie](https://discord.com/channels/1131200896827654144/1174002618058678323/1174084556257775656) -- *"This project is stellar."* β€” [funkytaco](https://github.com/Aider-AI/aider/issues/112#issuecomment-1637429008) -- *"Amazing project, definitely the best AI coding assistant I've used."* β€” [joshuavial](https://github.com/Aider-AI/aider/issues/84) -- *"I absolutely love using Aider ... It makes software development feel so much lighter as an experience."* β€” [principalideal0](https://discord.com/channels/1131200896827654144/1133421607499595858/1229689636012691468) -- *"I have been recovering from multiple shoulder surgeries ... and have used aider extensively. It has allowed me to continue productivity."* β€” [codeninja](https://www.reddit.com/r/OpenAI/s/nmNwkHy1zG) -- *"I am an aider addict. I'm getting so much more work done, but in less time."* β€” [dandandan](https://discord.com/channels/1131200896827654144/1131200896827654149/1135913253483069470) -- *"After wasting $100 on tokens trying to find something better, I'm back to Aider. It blows everything else out of the water hands down, there's no competition whatsoever."* β€” [SystemSculpt](https://discord.com/channels/1131200896827654144/1131200896827654149/1178736602797846548) -- *"Aider is amazing, coupled with Sonnet 3.5 it's quite mind blowing."* β€” [Josh Dingus](https://discord.com/channels/1131200896827654144/1133060684540813372/1262374225298198548) -- *"Hands down, this is the best AI coding assistant tool so far."* β€” [IndyDevDan](https://www.youtube.com/watch?v=MPYFPvxfGZs) -- *"[Aider] changed my daily coding workflows. It's mind-blowing how a single Python application can change your life."* β€” [maledorak](https://discord.com/channels/1131200896827654144/1131200896827654149/1258453375620747264) -- *"Best agent for actual dev work in existing codebases."* β€” [Nick Dobos](https://twitter.com/NickADobos/status/1690408967963652097?s=20) -- *"One of my favorite pieces of software. Blazing trails on new paradigms!"* β€” [Chris Wall](https://x.com/chris65536/status/1905053299251798432) -- *"Aider has been revolutionary for me and my work."* β€” [Starry Hope](https://x.com/starryhopeblog/status/1904985812137132056) -- *"Try aider! One of the best ways to vibe code."* β€” [Chris Wall](https://x.com/Chris65536/status/1905053418961391929) -- *"Aider is hands down the best. And it's free and opensource."* β€” [AriyaSavakaLurker](https://www.reddit.com/r/ChatGPTCoding/comments/1ik16y6/whats_your_take_on_aider/mbip39n/) -- *"Aider is also my best friend."* β€” [jzn21](https://www.reddit.com/r/ChatGPTCoding/comments/1heuvuo/aider_vs_cline_vs_windsurf_vs_cursor/m27dcnb/) -- *"Try Aider, it's worth it."* β€” [jorgejhms](https://www.reddit.com/r/ChatGPTCoding/comments/1heuvuo/aider_vs_cline_vs_windsurf_vs_cursor/m27cp99/) -- *"I like aider :)"* β€” [Chenwei Cui](https://x.com/ccui42/status/1904965344999145698) -- *"Aider is the precision tool of LLM code gen. It is minimal, thoughtful and capable of surgical changes to your codebase all while keeping the developer in control."* β€” [Reilly Sweetland](https://x.com/rsweetland/status/1904963807237259586) -- *"Cannot believe aider vibe coded a 650 LOC feature across service and cli today in 1 shot."* - [autopoietist](https://discord.com/channels/1131200896827654144/1131200896827654149/1355675042259796101) -- *"Oh no the secret is out! Yes, Aider is the best coding tool around. I highly, highly recommend it to anyone."* β€” [Joshua D Vander Hook](https://x.com/jodavaho/status/1911154899057795218) -- *"thanks to aider, i have started and finished three personal projects within the last two days"* β€” [joseph stalzyn](https://x.com/anitaheeder/status/1908338609645904160) -- *"Been using aider as my daily driver for over a year ... I absolutely love the tool, like beyond words."* β€” [koleok](https://discord.com/channels/1131200896827654144/1273248471394291754/1356727448372252783) -- *"aider is really cool"* β€” [kache (@yacineMTB)](https://x.com/yacineMTB/status/1911224442430124387) +- *"My life has changed... Aider... It's going to rock your world."* β€” [Eric S. Raymond on X](https://x.com/esrtweet/status/1910809356381413593) +- *"The best free open source AI coding assistant."* β€” [IndyDevDan on YouTube](https://youtu.be/YALpX8oOn78) +- *"The best AI coding assistant so far."* β€” [Matthew Berman on YouTube](https://www.youtube.com/watch?v=df8afeb1FY8) +- *"Aider ... has easily quadrupled my coding productivity."* β€” [SOLAR_FIELDS on Hacker News](https://news.ycombinator.com/item?id=36212100) +- *"It's a cool workflow... Aider's ergonomics are perfect for me."* β€” [qup on Hacker News](https://news.ycombinator.com/item?id=38185326) +- *"It's really like having your senior developer live right in your Git repo - truly amazing!"* β€” [rappster on GitHub](https://github.com/Aider-AI/aider/issues/124) +- *"What an amazing tool. It's incredible."* β€” [valyagolev on GitHub](https://github.com/Aider-AI/aider/issues/6#issue-1722897858) +- *"Aider is such an astounding thing!"* β€” [cgrothaus on GitHub](https://github.com/Aider-AI/aider/issues/82#issuecomment-1631876700) +- *"It was WAY faster than I would be getting off the ground and making the first few working versions."* β€” [Daniel Feldman on X](https://twitter.com/d_feldman/status/1662295077387923456) +- *"THANK YOU for Aider! It really feels like a glimpse into the future of coding."* β€” [derwiki on Hacker News](https://news.ycombinator.com/item?id=38205643) +- *"It's just amazing. It is freeing me to do things I felt were out my comfort zone before."* β€” [Dougie on Discord](https://discord.com/channels/1131200896827654144/1174002618058678323/1174084556257775656) +- *"This project is stellar."* β€” [funkytaco on GitHub](https://github.com/Aider-AI/aider/issues/112#issuecomment-1637429008) +- *"Amazing project, definitely the best AI coding assistant I've used."* β€” [joshuavial on GitHub](https://github.com/Aider-AI/aider/issues/84) +- *"I absolutely love using Aider ... It makes software development feel so much lighter as an experience."* β€” [principalideal0 on Discord](https://discord.com/channels/1131200896827654144/1133421607499595858/1229689636012691468) +- *"I have been recovering from ... surgeries ... aider ... has allowed me to continue productivity."* β€” [codeninja on Reddit](https://www.reddit.com/r/OpenAI/s/nmNwkHy1zG) +- *"I am an aider addict. I'm getting so much more work done, but in less time."* β€” [dandandan on Discord](https://discord.com/channels/1131200896827654144/1131200896827654149/1135913253483069470) +- *"Aider... blows everything else out of the water hands down, there's no competition whatsoever."* β€” [SystemSculpt on Discord](https://discord.com/channels/1131200896827654144/1131200896827654149/1178736602797846548) +- *"Aider is amazing, coupled with Sonnet 3.5 it's quite mind blowing."* β€” [Josh Dingus on Discord](https://discord.com/channels/1131200896827654144/1133060684540813372/1262374225298198548) +- *"Hands down, this is the best AI coding assistant tool so far."* β€” [IndyDevDan on YouTube](https://www.youtube.com/watch?v=MPYFPvxfGZs) +- *"[Aider] changed my daily coding workflows. It's mind-blowing how ...(it)... can change your life."* β€” [maledorak on Discord](https://discord.com/channels/1131200896827654144/1131200896827654149/1258453375620747264) +- *"Best agent for actual dev work in existing codebases."* β€” [Nick Dobos on X](https://twitter.com/NickADobos/status/1690408967963652097?s=20) +- *"One of my favorite pieces of software. Blazing trails on new paradigms!"* β€” [Chris Wall on X](https://x.com/chris65536/status/1905053299251798432) +- *"Aider has been revolutionary for me and my work."* β€” [Starry Hope on X](https://x.com/starryhopeblog/status/1904985812137132056) +- *"Try aider! One of the best ways to vibe code."* β€” [Chris Wall on X](https://x.com/Chris65536/status/1905053418961391929) +- *"Freaking love Aider."* β€” [hztar on Hacker News](https://news.ycombinator.com/item?id=44035015) +- *"Aider is hands down the best. And it's free and opensource."* β€” [AriyaSavakaLurker on Reddit](https://www.reddit.com/r/ChatGPTCoding/comments/1ik16y6/whats_your_take_on_aider/mbip39n/) +- *"Aider is also my best friend."* β€” [jzn21 on Reddit](https://www.reddit.com/r/ChatGPTCoding/comments/1heuvuo/aider_vs_cline_vs_windsurf_vs_cursor/m27dcnb/) +- *"Try Aider, it's worth it."* β€” [jorgejhms on Reddit](https://www.reddit.com/r/ChatGPTCoding/comments/1heuvuo/aider_vs_cline_vs_windsurf_vs_cursor/m27cp99/) +- *"I like aider :)"* β€” [Chenwei Cui on X](https://x.com/ccui42/status/1904965344999145698) +- *"Aider is the precision tool of LLM code gen... Minimal, thoughtful and capable of surgical changes ... while keeping the developer in control."* β€” [Reilly Sweetland on X](https://x.com/rsweetland/status/1904963807237259586) +- *"Cannot believe aider vibe coded a 650 LOC feature across service and cli today in 1 shot."* - [autopoietist on Discord](https://discord.com/channels/1131200896827654144/1131200896827654149/1355675042259796101) +- *"Oh no the secret is out! Yes, Aider is the best coding tool around. I highly, highly recommend it to anyone."* β€” [Joshua D Vander Hook on X](https://x.com/jodavaho/status/1911154899057795218) +- *"thanks to aider, i have started and finished three personal projects within the last two days"* β€” [joseph stalzyn on X](https://x.com/anitaheeder/status/1908338609645904160) +- *"Been using aider as my daily driver for over a year ... I absolutely love the tool, like beyond words."* β€” [koleok on Discord](https://discord.com/channels/1131200896827654144/1273248471394291754/1356727448372252783) +- *"Aider ... is the tool to benchmark against."* β€” [BeetleB on Hacker News](https://news.ycombinator.com/item?id=43930201) +- *"aider is really cool"* β€” [kache on X](https://x.com/yacineMTB/status/1911224442430124387) diff --git a/aider/__init__.py b/aider/__init__.py index 825bf0439..00b338056 100644 --- a/aider/__init__.py +++ b/aider/__init__.py @@ -1,6 +1,6 @@ from packaging import version -__version__ = "0.82.3.dev" +__version__ = "0.86.2.dev" safe_version = __version__ try: diff --git a/aider/analytics.py b/aider/analytics.py index d5c37c10a..f3eb071c3 100644 --- a/aider/analytics.py +++ b/aider/analytics.py @@ -70,9 +70,17 @@ class Analytics: # ephemeral logfile = None - def __init__(self, logfile=None, permanently_disable=False): + def __init__( + self, + logfile=None, + permanently_disable=False, + posthog_host=None, + posthog_project_api_key=None, + ): self.logfile = logfile self.get_or_create_uuid() + self.custom_posthog_host = posthog_host + self.custom_posthog_project_api_key = posthog_project_api_key if self.permanently_disable or permanently_disable or not self.asked_opt_in: self.disable(permanently_disable) @@ -92,8 +100,8 @@ class Analytics: # self.mp = Mixpanel(mixpanel_project_token) self.ph = Posthog( - project_api_key=posthog_project_api_key, - host=posthog_host, + project_api_key=self.custom_posthog_project_api_key or posthog_project_api_key, + host=self.custom_posthog_host or posthog_host, on_error=self.posthog_error, enable_exception_autocapture=True, super_properties=self.get_system_info(), # Add system info to all events @@ -229,7 +237,7 @@ class Analytics: self.mp = None # Disable mixpanel on connection errors if self.ph: - self.ph.capture(self.user_id, event_name, dict(properties)) + self.ph.capture(event_name, distinct_id=self.user_id, properties=dict(properties)) if self.logfile: log_entry = { diff --git a/aider/args.py b/aider/args.py index 6df19778b..5b3fdf07f 100644 --- a/aider/args.py +++ b/aider/args.py @@ -6,6 +6,7 @@ import sys from pathlib import Path import configargparse +import shtab from aider import __version__ from aider.args_formatter import ( @@ -39,10 +40,22 @@ def get_parser(default_config_files, git_root): config_file_parser_class=configargparse.YAMLConfigFileParser, auto_env_var_prefix="AIDER_", ) + # List of valid edit formats for argparse validation & shtab completion. + # Dynamically gather them from the registered coder classes so the list + # stays in sync if new formats are added. + from aider import coders as _aider_coders + + edit_format_choices = sorted( + { + c.edit_format + for c in _aider_coders.__all__ + if hasattr(c, "edit_format") and c.edit_format is not None + } + ) group = parser.add_argument_group("Main model") group.add_argument( "files", metavar="FILE", nargs="*", help="files to edit with an LLM (optional)" - ) + ).complete = shtab.FILE group.add_argument( "--model", metavar="MODEL", @@ -109,13 +122,13 @@ def get_parser(default_config_files, git_root): metavar="MODEL_SETTINGS_FILE", default=".aider.model.settings.yml", help="Specify a file with aider model settings for unknown models", - ) + ).complete = shtab.FILE group.add_argument( "--model-metadata-file", metavar="MODEL_METADATA_FILE", default=".aider.model.metadata.json", help="Specify a file with context window and costs for unknown models", - ) + ).complete = shtab.FILE group.add_argument( "--alias", action="append", @@ -130,7 +143,10 @@ def get_parser(default_config_files, git_root): group.add_argument( "--thinking-tokens", type=str, - help="Set the thinking token budget for models that support it (default: not set)", + help=( + "Set the thinking token budget for models that support it. Use 0 to disable. (default:" + " not set)" + ), ) group.add_argument( "--verify-ssl", @@ -148,6 +164,7 @@ def get_parser(default_config_files, git_root): "--edit-format", "--chat-mode", metavar="EDIT_FORMAT", + choices=edit_format_choices, default=None, help="Specify what edit format the LLM should use (default depends on model)", ) @@ -182,6 +199,7 @@ def get_parser(default_config_files, git_root): group.add_argument( "--editor-edit-format", metavar="EDITOR_EDIT_FORMAT", + choices=edit_format_choices, default=None, help="Specify the edit format for the editor model (default: depends on editor model)", ) @@ -261,13 +279,13 @@ def get_parser(default_config_files, git_root): metavar="INPUT_HISTORY_FILE", default=default_input_history_file, help=f"Specify the chat input history file (default: {default_input_history_file})", - ) + ).complete = shtab.FILE group.add_argument( "--chat-history-file", metavar="CHAT_HISTORY_FILE", default=default_chat_history_file, help=f"Specify the chat history file (default: {default_chat_history_file})", - ) + ).complete = shtab.FILE group.add_argument( "--restore-chat-history", action=argparse.BooleanOptionalAction, @@ -279,7 +297,7 @@ def get_parser(default_config_files, git_root): metavar="LLM_HISTORY_FILE", default=None, help="Log the conversation with the LLM to this file (for example, .aider.llm.history)", - ) + ).complete = shtab.FILE ########## group = parser.add_argument_group("Output settings") @@ -395,6 +413,12 @@ def get_parser(default_config_files, git_root): default=True, help="Enable/disable adding .aider* to .gitignore (default: True)", ) + group.add_argument( + "--add-gitignore-files", + action=argparse.BooleanOptionalAction, + default=False, + help="Enable/disable the addition of files listed in .gitignore to Aider's editing scope.", + ) default_aiderignore_file = ( os.path.join(git_root, ".aiderignore") if git_root else ".aiderignore" ) @@ -405,7 +429,7 @@ def get_parser(default_config_files, git_root): type=lambda path_str: resolve_aiderignore_path(path_str, git_root), default=default_aiderignore_file, help="Specify the aider ignore file (default: .aiderignore in git root)", - ) + ).complete = shtab.FILE group.add_argument( "--subtree-only", action="store_true", @@ -427,14 +451,20 @@ def get_parser(default_config_files, git_root): group.add_argument( "--attribute-author", action=argparse.BooleanOptionalAction, - default=True, - help="Attribute aider code changes in the git author name (default: True)", + default=None, + help=( + "Attribute aider code changes in the git author name (default: True). If explicitly set" + " to True, overrides --attribute-co-authored-by precedence." + ), ) group.add_argument( "--attribute-committer", action=argparse.BooleanOptionalAction, - default=True, - help="Attribute aider commits in the git committer name (default: True)", + default=None, + help=( + "Attribute aider commits in the git committer name (default: True). If explicitly set" + " to True, overrides --attribute-co-authored-by precedence for aider edits." + ), ) group.add_argument( "--attribute-commit-message-author", @@ -448,6 +478,16 @@ def get_parser(default_config_files, git_root): default=False, help="Prefix all commit messages with 'aider: ' (default: False)", ) + group.add_argument( + "--attribute-co-authored-by", + action=argparse.BooleanOptionalAction, + default=True, + help=( + "Attribute aider edits using the Co-authored-by trailer in the commit message" + " (default: True). If True, this takes precedence over default --attribute-author and" + " --attribute-committer behavior unless they are explicitly set to True." + ), + ) group.add_argument( "--git-commit-verify", action=argparse.BooleanOptionalAction, @@ -535,13 +575,23 @@ def get_parser(default_config_files, git_root): "--analytics-log", metavar="ANALYTICS_LOG_FILE", help="Specify a file to log analytics events", - ) + ).complete = shtab.FILE group.add_argument( "--analytics-disable", action="store_true", help="Permanently disable analytics", default=False, ) + group.add_argument( + "--analytics-posthog-host", + metavar="ANALYTICS_POSTHOG_HOST", + help="Send analytics to custom PostHog instance", + ) + group.add_argument( + "--analytics-posthog-project-api-key", + metavar="ANALYTICS_POSTHOG_PROJECT_API_KEY", + help="Send analytics to custom PostHog project", + ) ######### group = parser.add_argument_group("Upgrading") @@ -602,7 +652,7 @@ def get_parser(default_config_files, git_root): "Specify a file containing the message to send the LLM, process reply, then exit" " (disables chat mode)" ), - ) + ).complete = shtab.FILE group.add_argument( "--gui", "--browser", @@ -620,7 +670,7 @@ def get_parser(default_config_files, git_root): "--apply", metavar="FILE", help="Apply the changes from the given file instead of running the chat (debug)", - ) + ).complete = shtab.FILE group.add_argument( "--apply-clipboard-edits", action="store_true", @@ -670,18 +720,24 @@ def get_parser(default_config_files, git_root): ###### group = parser.add_argument_group("Other settings") + group.add_argument( + "--disable-playwright", + action="store_true", + help="Never prompt for or attempt to install Playwright for web scraping (default: False).", + default=False, + ) group.add_argument( "--file", action="append", metavar="FILE", help="specify a file to edit (can be used multiple times)", - ) + ).complete = shtab.FILE group.add_argument( "--read", action="append", metavar="FILE", help="specify a read-only file (can be used multiple times)", - ) + ).complete = shtab.FILE group.add_argument( "--vim", action="store_true", @@ -694,6 +750,12 @@ def get_parser(default_config_files, git_root): default=None, help="Specify the language to use in the chat (default: None, uses system settings)", ) + group.add_argument( + "--commit-language", + metavar="COMMIT_LANGUAGE", + default=None, + help="Specify the language to use in the commit message (default: None, user language)", + ) group.add_argument( "--yes-always", action="store_true", @@ -711,7 +773,7 @@ def get_parser(default_config_files, git_root): "--load", metavar="LOAD_FILE", help="Load and execute /commands from a file on launch", - ) + ).complete = shtab.FILE group.add_argument( "--encoding", default="utf-8", @@ -732,7 +794,7 @@ def get_parser(default_config_files, git_root): "Specify the config file (default: search for .aider.conf.yml in git root, cwd" " or home directory)" ), - ) + ).complete = shtab.FILE # This is a duplicate of the argument in the preparser and is a no-op by this time of # argument parsing, but it's here so that the help is displayed as expected. group.add_argument( @@ -740,7 +802,7 @@ def get_parser(default_config_files, git_root): metavar="ENV_FILE", default=default_env_file(git_root), help="Specify the .env file to load (default: .env in git root)", - ) + ).complete = shtab.FILE group.add_argument( "--suggest-shell-commands", action=argparse.BooleanOptionalAction, @@ -788,6 +850,17 @@ def get_parser(default_config_files, git_root): help="Specify which editor to use for the /editor command", ) + supported_shells_list = sorted(list(shtab.SUPPORTED_SHELLS)) + group.add_argument( + "--shell-completions", + metavar="SHELL", + choices=supported_shells_list, + help=( + "Print shell completion script for the specified SHELL and exit. Supported shells:" + f" {', '.join(supported_shells_list)}. Example: aider --shell-completions bash" + ), + ) + ########## group = parser.add_argument_group("Deprecated model settings") # Add deprecated model shortcut arguments @@ -836,13 +909,34 @@ def get_sample_dotenv(): def main(): - arg = sys.argv[1] if len(sys.argv[1:]) else None - - if arg == "md": - print(get_md_help()) - elif arg == "dotenv": - print(get_sample_dotenv()) + if len(sys.argv) > 1: + command = sys.argv[1] else: + command = "yaml" # Default to yaml if no command is given + + if command == "md": + print(get_md_help()) + elif command == "dotenv": + print(get_sample_dotenv()) + elif command == "yaml": + print(get_sample_yaml()) + elif command == "completion": + if len(sys.argv) > 2: + shell = sys.argv[2] + if shell not in shtab.SUPPORTED_SHELLS: + print(f"Error: Unsupported shell '{shell}'.", file=sys.stderr) + print(f"Supported shells are: {', '.join(shtab.SUPPORTED_SHELLS)}", file=sys.stderr) + sys.exit(1) + parser = get_parser([], None) + parser.prog = "aider" # Set the program name on the parser + print(shtab.complete(parser, shell=shell)) + else: + print("Error: Please specify a shell for completion.", file=sys.stderr) + print(f"Usage: python {sys.argv[0]} completion ", file=sys.stderr) + print(f"Supported shells are: {', '.join(shtab.SUPPORTED_SHELLS)}", file=sys.stderr) + sys.exit(1) + else: + # Default to YAML for any other unrecognized argument, or if 'yaml' was explicitly passed print(get_sample_yaml()) diff --git a/aider/args_formatter.py b/aider/args_formatter.py index c7672ccba..fc4c3efac 100644 --- a/aider/args_formatter.py +++ b/aider/args_formatter.py @@ -96,7 +96,7 @@ class YamlHelpFormatter(argparse.HelpFormatter): # Place in your home dir, or at the root of your git repo. ########################################################## -# Note: You can only put OpenAI and Anthropic API keys in the yaml +# Note: You can only put OpenAI and Anthropic API keys in the YAML # config file. Keys for all APIs can be stored in a .env file # https://aider.chat/docs/config/dotenv.html diff --git a/aider/coders/__init__.py b/aider/coders/__init__.py index e494fa3e4..88bcddfaa 100644 --- a/aider/coders/__init__.py +++ b/aider/coders/__init__.py @@ -10,6 +10,7 @@ from .editor_whole_coder import EditorWholeFileCoder from .help_coder import HelpCoder from .patch_coder import PatchCoder from .udiff_coder import UnifiedDiffCoder +from .udiff_simple import UnifiedDiffSimpleCoder from .wholefile_coder import WholeFileCoder # from .single_wholefile_func_coder import SingleWholeFileFunctionCoder @@ -23,6 +24,7 @@ __all__ = [ WholeFileCoder, PatchCoder, UnifiedDiffCoder, + UnifiedDiffSimpleCoder, # SingleWholeFileFunctionCoder, ArchitectCoder, EditorEditBlockCoder, diff --git a/aider/coders/ask_prompts.py b/aider/coders/ask_prompts.py index dcedf2d14..347466bcf 100644 --- a/aider/coders/ask_prompts.py +++ b/aider/coders/ask_prompts.py @@ -8,7 +8,7 @@ class AskPrompts(CoderPrompts): Answer questions about the supplied code. Always reply to the user in {language}. -Describe code changes however you like. Don't use SEARCH/REPLACE blocks! +If you need to describe code changes, do so *briefly*. """ example_messages = [] @@ -32,4 +32,4 @@ Here are summaries of some files present in my git repo. If you need to see the full contents of any files to answer my questions, ask me to *add them to the chat*. """ - system_reminder = "" + system_reminder = "{final_reminders}" diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index 675570c60..b824e9286 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -15,10 +15,19 @@ import time import traceback from collections import defaultdict from datetime import datetime + +# Optional dependency: used to convert locale codes (eg ``en_US``) +# into human-readable language names (eg ``English``). +try: + from babel import Locale # type: ignore +except ImportError: # Babel not installed – we will fall back to a small mapping + Locale = None from json.decoder import JSONDecodeError from pathlib import Path from typing import List +from rich.console import Console + from aider import __version__, models, prompts, urls, utils from aider.analytics import Analytics from aider.commands import Commands @@ -38,6 +47,7 @@ from aider.repo import ANY_GIT_ERROR, GitRepo from aider.repomap import RepoMap from aider.run_cmd import run_cmd from aider.utils import format_content, format_messages, format_tokens, is_image_file +from aider.waiting import WaitingSpinner from ..dump import dump # noqa: F401 from .chat_chunks import ChatChunks @@ -101,8 +111,6 @@ class Coder: partial_response_content = "" commit_before_message = [] message_cost = 0.0 - message_tokens_sent = 0 - message_tokens_received = 0 add_cache_headers = False cache_warming_thread = None num_cache_warming_pings = 0 @@ -110,6 +118,7 @@ class Coder: detect_urls = True ignore_mentions = None chat_language = None + commit_language = None file_watcher = None @classmethod @@ -168,6 +177,8 @@ class Coder: commands=from_coder.commands.clone(), total_cost=from_coder.total_cost, ignore_mentions=from_coder.ignore_mentions, + total_tokens_sent=from_coder.total_tokens_sent, + total_tokens_received=from_coder.total_tokens_received, file_watcher=from_coder.file_watcher, ) use_kwargs.update(update) # override to complete the switch @@ -291,6 +302,7 @@ class Coder: io, repo=None, fnames=None, + add_gitignore_files=False, read_only_fnames=None, show_diffs=False, auto_commits=True, @@ -318,8 +330,11 @@ class Coder: num_cache_warming_pings=0, suggest_shell_commands=True, chat_language=None, + commit_language=None, detect_urls=True, ignore_mentions=None, + total_tokens_sent=0, + total_tokens_received=0, file_watcher=None, auto_copy_context=False, auto_accept_architect=True, @@ -329,6 +344,7 @@ class Coder: self.event = self.analytics.event self.chat_language = chat_language + self.commit_language = commit_language self.commit_before_message = [] self.aider_commit_hashes = set() self.rejected_urls = set() @@ -366,10 +382,15 @@ class Coder: self.need_commit_before_edits = set() self.total_cost = total_cost + self.total_tokens_sent = total_tokens_sent + self.total_tokens_received = total_tokens_received + self.message_tokens_sent = 0 + self.message_tokens_received = 0 self.verbose = verbose self.abs_fnames = set() self.abs_read_only_fnames = set() + self.add_gitignore_files = add_gitignore_files if cur_messages: self.cur_messages = cur_messages @@ -427,8 +448,9 @@ class Coder: for fname in fnames: fname = Path(fname) - if self.repo and self.repo.git_ignored_file(fname): + if self.repo and self.repo.git_ignored_file(fname) and not self.add_gitignore_files: self.io.tool_warning(f"Skipping {fname} that matches gitignore spec.") + continue if self.repo and self.repo.ignored_file(fname): self.io.tool_warning(f"Skipping {fname} that matches aiderignore spec.") @@ -564,6 +586,15 @@ class Coder: return True + def _stop_waiting_spinner(self): + """Stop and clear the waiting spinner if it is running.""" + spinner = getattr(self, "waiting_spinner", None) + if spinner: + try: + spinner.stop() + finally: + self.waiting_spinner = None + def get_abs_fnames_content(self): for fname in list(self.abs_fnames): content = self.io.read_text(fname) @@ -953,6 +984,9 @@ class Coder: return inp def keyboard_interrupt(self): + # Ensure cursor is visible on exit + Console().show_cursor(True) + now = time.time() thresh = 2 # seconds @@ -1011,23 +1045,82 @@ class Coder: ] self.cur_messages = [] - def get_user_language(self): - if self.chat_language: - return self.chat_language + def normalize_language(self, lang_code): + """ + Convert a locale code such as ``en_US`` or ``fr`` into a readable + language name (e.g. ``English`` or ``French``). If Babel is + available it is used for reliable conversion; otherwise a small + built-in fallback map handles common languages. + """ + if not lang_code: + return None + if lang_code.upper() in ("C", "POSIX"): + return None + + # Probably already a language name + if ( + len(lang_code) > 3 + and "_" not in lang_code + and "-" not in lang_code + and lang_code[0].isupper() + ): + return lang_code + + # Preferred: Babel + if Locale is not None: + try: + loc = Locale.parse(lang_code.replace("-", "_")) + return loc.get_display_name("en").capitalize() + except Exception: + pass # Fall back to manual mapping + + # Simple fallback for common languages + fallback = { + "en": "English", + "fr": "French", + "es": "Spanish", + "de": "German", + "it": "Italian", + "pt": "Portuguese", + "zh": "Chinese", + "ja": "Japanese", + "ko": "Korean", + "ru": "Russian", + } + primary_lang_code = lang_code.replace("-", "_").split("_")[0].lower() + return fallback.get(primary_lang_code, lang_code) + + def get_user_language(self): + """ + Detect the user's language preference and return a human-readable + language name such as ``English``. Detection order: + + 1. ``self.chat_language`` if explicitly set + 2. ``locale.getlocale()`` + 3. ``LANG`` / ``LANGUAGE`` / ``LC_ALL`` / ``LC_MESSAGES`` environment variables + """ + + # Explicit override + if self.chat_language: + return self.normalize_language(self.chat_language) + + # System locale try: lang = locale.getlocale()[0] if lang: - return lang # Return the full language code, including country + lang = self.normalize_language(lang) + if lang: + return lang except Exception: pass - for env_var in ["LANG", "LANGUAGE", "LC_ALL", "LC_MESSAGES"]: + # Environment variables + for env_var in ("LANG", "LANGUAGE", "LC_ALL", "LC_MESSAGES"): lang = os.environ.get(env_var) if lang: - return lang.split(".")[ - 0 - ] # Return language and country, but remove encoding if present + lang = lang.split(".")[0] # Strip encoding if present + return self.normalize_language(lang) return None @@ -1079,12 +1172,15 @@ class Coder: return platform_text def fmt_system_prompt(self, prompt): + final_reminders = [] if self.main_model.lazy: - lazy_prompt = self.gpt_prompts.lazy_prompt - elif self.main_model.overeager: - lazy_prompt = self.gpt_prompts.overeager_prompt - else: - lazy_prompt = "" + final_reminders.append(self.gpt_prompts.lazy_prompt) + if self.main_model.overeager: + final_reminders.append(self.gpt_prompts.overeager_prompt) + + user_lang = self.get_user_language() + if user_lang: + final_reminders.append(f"Reply in {user_lang}.\n") platform_text = self.get_platform_info() @@ -1099,10 +1195,10 @@ class Coder: ) rename_with_shell = "" - if self.chat_language: - language = self.chat_language + if user_lang: # user_lang is the result of self.get_user_language() + language = user_lang else: - language = "the same language they are using" + language = "the same language they are using" # Default if no specific lang detected if self.fence[0] == "`" * 4: quad_backtick_reminder = ( @@ -1111,10 +1207,12 @@ class Coder: else: quad_backtick_reminder = "" + final_reminders = "\n\n".join(final_reminders) + prompt = prompt.format( fence=self.fence, quad_backtick_reminder=quad_backtick_reminder, - lazy_prompt=lazy_prompt, + final_reminders=final_reminders, platform=platform_text, shell_cmd_prompt=shell_cmd_prompt, rename_with_shell=rename_with_shell, @@ -1123,14 +1221,13 @@ class Coder: language=language, ) - if self.main_model.system_prompt_prefix: - prompt = self.main_model.system_prompt_prefix + prompt - return prompt def format_chat_chunks(self): self.choose_fence() main_sys = self.fmt_system_prompt(self.gpt_prompts.main_system) + if self.main_model.system_prompt_prefix: + main_sys = self.main_model.system_prompt_prefix + "\n" + main_sys example_messages = [] if self.main_model.examples_as_sys_msg: @@ -1339,8 +1436,13 @@ class Coder: utils.show_messages(messages, functions=self.functions) self.multi_response_content = "" - if self.show_pretty() and self.stream: - self.mdstream = self.io.get_assistant_mdstream() + if self.show_pretty(): + self.waiting_spinner = WaitingSpinner("Waiting for " + self.main_model.name) + self.waiting_spinner.start() + if self.stream: + self.mdstream = self.io.get_assistant_mdstream() + else: + self.mdstream = None else: self.mdstream = None @@ -1413,6 +1515,9 @@ class Coder: self.live_incremental_response(True) self.mdstream = None + # Ensure any waiting spinner is stopped + self._stop_waiting_spinner() + self.partial_response_content = self.get_multi_response_content_in_progress(True) self.remove_reasoning_content() self.multi_response_content = "" @@ -1729,6 +1834,9 @@ class Coder: self.io.ai_output(json.dumps(args, indent=4)) def show_send_output(self, completion): + # Stop spinner once we have a response + self._stop_waiting_spinner() + if self.verbose: print(completion) @@ -1843,6 +1951,8 @@ class Coder: except AttributeError: pass + if received_content: + self._stop_waiting_spinner() self.partial_response_content += text if self.show_pretty(): @@ -1922,6 +2032,44 @@ class Coder: self.usage_report = tokens_report return + try: + # Try and use litellm's built in cost calculator. Seems to work for non-streaming only? + cost = litellm.completion_cost(completion_response=completion) + except Exception: + cost = 0 + + if not cost: + cost = self.compute_costs_from_tokens( + prompt_tokens, completion_tokens, cache_write_tokens, cache_hit_tokens + ) + + self.total_cost += cost + self.message_cost += cost + + def format_cost(value): + if value == 0: + return "0.00" + magnitude = abs(value) + if magnitude >= 0.01: + return f"{value:.2f}" + else: + return f"{value:.{max(2, 2 - int(math.log10(magnitude)))}f}" + + cost_report = ( + f"Cost: ${format_cost(self.message_cost)} message," + f" ${format_cost(self.total_cost)} session." + ) + + if cache_hit_tokens and cache_write_tokens: + sep = "\n" + else: + sep = " " + + self.usage_report = tokens_report + sep + cost_report + + def compute_costs_from_tokens( + self, prompt_tokens, completion_tokens, cache_write_tokens, cache_hit_tokens + ): cost = 0 input_cost_per_token = self.main_model.info.get("input_cost_per_token") or 0 @@ -1949,35 +2097,15 @@ class Coder: cost += prompt_tokens * input_cost_per_token cost += completion_tokens * output_cost_per_token - - self.total_cost += cost - self.message_cost += cost - - def format_cost(value): - if value == 0: - return "0.00" - magnitude = abs(value) - if magnitude >= 0.01: - return f"{value:.2f}" - else: - return f"{value:.{max(2, 2 - int(math.log10(magnitude)))}f}" - - cost_report = ( - f"Cost: ${format_cost(self.message_cost)} message," - f" ${format_cost(self.total_cost)} session." - ) - - if cache_hit_tokens and cache_write_tokens: - sep = "\n" - else: - sep = " " - - self.usage_report = tokens_report + sep + cost_report + return cost def show_usage_report(self): if not self.usage_report: return + self.total_tokens_sent += self.message_tokens_sent + self.total_tokens_received += self.message_tokens_received + self.io.tool_output(self.usage_report) prompt_tokens = self.message_tokens_sent @@ -2252,7 +2380,7 @@ class Coder: context = self.get_context_from_history(self.cur_messages) try: - res = self.repo.commit(fnames=edited, context=context, aider_edits=True) + res = self.repo.commit(fnames=edited, context=context, aider_edits=True, coder=self) if res: self.show_auto_commit_outcome(res) commit_hash, commit_message = res @@ -2288,7 +2416,7 @@ class Coder: if not self.repo: return - self.repo.commit(fnames=self.need_commit_before_edits) + self.repo.commit(fnames=self.need_commit_before_edits, coder=self) # files changed, move cur messages back behind the files messages # self.move_back_cur_messages(self.gpt_prompts.files_content_local_edits) diff --git a/aider/coders/base_prompts.py b/aider/coders/base_prompts.py index 464212031..36f991f1e 100644 --- a/aider/coders/base_prompts.py +++ b/aider/coders/base_prompts.py @@ -15,7 +15,9 @@ You always COMPLETELY IMPLEMENT the needed code! """ overeager_prompt = """Pay careful attention to the scope of the user's request. -Do what they ask, but no more.""" +Do what they ask, but no more. +Do not improve, comment, fix or modify unrelated parts of the code in any way! +""" example_messages = [] diff --git a/aider/coders/editblock_coder.py b/aider/coders/editblock_coder.py index 4d7776278..37d40d97c 100644 --- a/aider/coders/editblock_coder.py +++ b/aider/coders/editblock_coder.py @@ -383,7 +383,7 @@ def do_replace(fname, content, before_text, after_text, fence=None): return new_content -HEAD = r"^<{5,9} SEARCH\s*$" +HEAD = r"^<{5,9} SEARCH>?\s*$" DIVIDER = r"^={5,9}\s*$" UPDATED = r"^>{5,9} REPLACE\s*$" @@ -412,7 +412,16 @@ def strip_filename(filename, fence): return start_fence = fence[0] - if filename.startswith(start_fence) or filename.startswith(triple_backticks): + if filename.startswith(start_fence): + candidate = filename[len(start_fence) :] + if candidate and ("." in candidate or "/" in candidate): + return candidate + return + + if filename.startswith(triple_backticks): + candidate = filename[len(triple_backticks) :] + if candidate and ("." in candidate or "/" in candidate): + return candidate return filename = filename.rstrip(":") @@ -456,8 +465,12 @@ def find_original_update_blocks(content, fence=DEFAULT_FENCE, valid_fnames=None) ] # Check if the next line or the one after that is an editblock - next_is_editblock = (i + 1 < len(lines) and head_pattern.match(lines[i + 1].strip()) - or i + 2 < len(lines) and head_pattern.match(lines[i + 2].strip())) + next_is_editblock = ( + i + 1 < len(lines) + and head_pattern.match(lines[i + 1].strip()) + or i + 2 < len(lines) + and head_pattern.match(lines[i + 2].strip()) + ) if any(line.strip().startswith(start) for start in shell_starts) and not next_is_editblock: shell_content = [] diff --git a/aider/coders/editblock_fenced_coder.py b/aider/coders/editblock_fenced_coder.py index 80e5036ea..cd09e27c5 100644 --- a/aider/coders/editblock_fenced_coder.py +++ b/aider/coders/editblock_fenced_coder.py @@ -5,5 +5,6 @@ from .editblock_fenced_prompts import EditBlockFencedPrompts class EditBlockFencedCoder(EditBlockCoder): """A coder that uses fenced search/replace blocks for code modifications.""" + edit_format = "diff-fenced" gpt_prompts = EditBlockFencedPrompts() diff --git a/aider/coders/editblock_fenced_prompts.py b/aider/coders/editblock_fenced_prompts.py index 74f647f93..79fa179d9 100644 --- a/aider/coders/editblock_fenced_prompts.py +++ b/aider/coders/editblock_fenced_prompts.py @@ -137,7 +137,7 @@ To rename files which have been added to the chat, use shell commands at the end If the user just says something like "ok" or "go ahead" or "do that" they probably want you to make SEARCH/REPLACE blocks for the code changes you just proposed. The user will say when they've applied your edits. If they haven't explicitly confirmed the edits have been applied, they probably want proper SEARCH/REPLACE blocks. -{lazy_prompt} +{final_reminders} ONLY EVER RETURN CODE IN A *SEARCH/REPLACE BLOCK*! {shell_cmd_reminder} """ diff --git a/aider/coders/editblock_prompts.py b/aider/coders/editblock_prompts.py index 1457e021e..fc494af4f 100644 --- a/aider/coders/editblock_prompts.py +++ b/aider/coders/editblock_prompts.py @@ -1,5 +1,6 @@ # flake8: noqa: E501 +from . import shell from .base_prompts import CoderPrompts @@ -7,12 +8,10 @@ class EditBlockPrompts(CoderPrompts): main_system = """Act as an expert software developer. Always use best practices when coding. Respect and use existing conventions, libraries, etc that are already present in the code base. -{lazy_prompt} +{final_reminders} Take requests for changes to the supplied code. If the request is ambiguous, ask questions. -Always reply to the user in {language}. - Once you understand the request you MUST: 1. Decide if you need to propose *SEARCH/REPLACE* edits to any files that haven't been added to the chat. You can create new files without asking! @@ -28,32 +27,6 @@ You can keep asking if you then decide you need to edit more files. All changes to files must use this *SEARCH/REPLACE block* format. ONLY EVER RETURN CODE IN A *SEARCH/REPLACE BLOCK*! {shell_cmd_prompt} -""" - - shell_cmd_prompt = """ -4. *Concisely* suggest any shell commands the user might want to run in ```bash blocks. - -Just suggest shell commands this way, not example code. -Only suggest complete shell commands that are ready to execute, without placeholders. -Only suggest at most a few shell commands at a time, not more than 1-3, one per line. -Do not suggest multi-line shell commands. -All shell commands will run from the root directory of the user's project. - -Use the appropriate shell based on the user's system info: -{platform} -Examples of when to suggest shell commands: - -- If you changed a self-contained html file, suggest an OS-appropriate command to open a browser to view it to see the updated content. -- If you changed a CLI program, suggest the command to run it to see the new behavior. -- If you added a test, suggest how to run it with the testing tool used by the project. -- Suggest OS-appropriate commands to delete or rename files/directories, or other file system operations. -- If your code changes add new dependencies, suggest the command to install them. -- Etc. -""" - - no_shell_cmd_prompt = """ -Keep in mind these details about the user's platform and environment: -{platform} """ example_messages = [ dict( @@ -181,7 +154,7 @@ If you want to put code in a new file, use a *SEARCH/REPLACE block* with: - An empty `SEARCH` section - The new file's contents in the `REPLACE` section -{rename_with_shell}{go_ahead_tip}{lazy_prompt}ONLY EVER RETURN CODE IN A *SEARCH/REPLACE BLOCK*! +{rename_with_shell}{go_ahead_tip}{final_reminders}ONLY EVER RETURN CODE IN A *SEARCH/REPLACE BLOCK*! {shell_cmd_reminder} """ @@ -194,14 +167,6 @@ The user will say when they've applied your edits. If they haven't explicitly co """ - shell_cmd_reminder = """ -Examples of when to suggest shell commands: - -- If you changed a self-contained html file, suggest an OS-appropriate command to open a browser to view it to see the updated content. -- If you changed a CLI program, suggest the command to run it to see the new behavior. -- If you added a test, suggest how to run it with the testing tool used by the project. -- Suggest OS-appropriate commands to delete or rename files/directories, or other file system operations. -- If your code changes add new dependencies, suggest the command to install them. -- Etc. - -""" + shell_cmd_prompt = shell.shell_cmd_prompt + no_shell_cmd_prompt = shell.no_shell_cmd_prompt + shell_cmd_reminder = shell.shell_cmd_reminder diff --git a/aider/coders/editor_editblock_prompts.py b/aider/coders/editor_editblock_prompts.py index 463075e2c..0ec36b47f 100644 --- a/aider/coders/editor_editblock_prompts.py +++ b/aider/coders/editor_editblock_prompts.py @@ -5,7 +5,7 @@ from .editblock_prompts import EditBlockPrompts class EditorEditBlockPrompts(EditBlockPrompts): main_system = """Act as an expert software developer who edits source code. -{lazy_prompt} +{final_reminders} Describe each change with a *SEARCH/REPLACE block* per the examples below. All changes to files must use this *SEARCH/REPLACE block* format. ONLY EVER RETURN CODE IN A *SEARCH/REPLACE BLOCK*! diff --git a/aider/coders/editor_whole_prompts.py b/aider/coders/editor_whole_prompts.py index 7abd0ee53..39bc38f64 100644 --- a/aider/coders/editor_whole_prompts.py +++ b/aider/coders/editor_whole_prompts.py @@ -5,6 +5,6 @@ from .wholefile_prompts import WholeFilePrompts class EditorWholeFilePrompts(WholeFilePrompts): main_system = """Act as an expert software developer and make changes to source code. -{lazy_prompt} +{final_reminders} Output a copy of each file that needs changes. """ diff --git a/aider/coders/help_coder.py b/aider/coders/help_coder.py index fcb1e6aa1..311805af7 100644 --- a/aider/coders/help_coder.py +++ b/aider/coders/help_coder.py @@ -5,6 +5,7 @@ from .help_prompts import HelpPrompts class HelpCoder(Coder): """Interactive help and documentation about aider.""" + edit_format = "help" gpt_prompts = HelpPrompts() diff --git a/aider/coders/patch_prompts.py b/aider/coders/patch_prompts.py index 830a04f2b..66832ee16 100644 --- a/aider/coders/patch_prompts.py +++ b/aider/coders/patch_prompts.py @@ -11,12 +11,10 @@ class PatchPrompts(EditBlockPrompts): main_system = """Act as an expert software developer. Always use best practices when coding. Respect and use existing conventions, libraries, etc that are already present in the code base. -{lazy_prompt} +{final_reminders} Take requests for changes to the supplied code. If the request is ambiguous, ask questions. -Always reply to the user in {language}. - Once you understand the request you MUST: 1. Decide if you need to propose edits to any files that haven't been added to the chat. You can create new files without asking! @@ -156,6 +154,6 @@ For `Add` actions, use the `*** Add File: [path/to/new/file]` marker, followed b For `Delete` actions, use the `*** Delete File: [path/to/file]` marker. No other lines are needed for the deletion. -{rename_with_shell}{go_ahead_tip}{lazy_prompt}ONLY EVER RETURN CODE IN THE SPECIFIED V4A DIFF FORMAT! +{rename_with_shell}{go_ahead_tip}{final_reminders}ONLY EVER RETURN CODE IN THE SPECIFIED V4A DIFF FORMAT! {shell_cmd_reminder} """ diff --git a/aider/coders/search_replace.py b/aider/coders/search_replace.py index f31e97799..320ff3ec7 100755 --- a/aider/coders/search_replace.py +++ b/aider/coders/search_replace.py @@ -109,7 +109,7 @@ class RelativeIndenter: """ if self.marker in text: - raise ValueError("Text already contains the outdent marker: {self.marker}") + raise ValueError(f"Text already contains the outdent marker: {self.marker}") lines = text.splitlines(keepends=True) diff --git a/aider/coders/shell.py b/aider/coders/shell.py new file mode 100644 index 000000000..2e3753a4d --- /dev/null +++ b/aider/coders/shell.py @@ -0,0 +1,37 @@ +shell_cmd_prompt = """ +4. *Concisely* suggest any shell commands the user might want to run in ```bash blocks. + +Just suggest shell commands this way, not example code. +Only suggest complete shell commands that are ready to execute, without placeholders. +Only suggest at most a few shell commands at a time, not more than 1-3, one per line. +Do not suggest multi-line shell commands. +All shell commands will run from the root directory of the user's project. + +Use the appropriate shell based on the user's system info: +{platform} +Examples of when to suggest shell commands: + +- If you changed a self-contained html file, suggest an OS-appropriate command to open a browser to view it to see the updated content. +- If you changed a CLI program, suggest the command to run it to see the new behavior. +- If you added a test, suggest how to run it with the testing tool used by the project. +- Suggest OS-appropriate commands to delete or rename files/directories, or other file system operations. +- If your code changes add new dependencies, suggest the command to install them. +- Etc. +""" # noqa + +no_shell_cmd_prompt = """ +Keep in mind these details about the user's platform and environment: +{platform} +""" # noqa + +shell_cmd_reminder = """ +Examples of when to suggest shell commands: + +- If you changed a self-contained html file, suggest an OS-appropriate command to open a browser to view it to see the updated content. +- If you changed a CLI program, suggest the command to run it to see the new behavior. +- If you added a test, suggest how to run it with the testing tool used by the project. +- Suggest OS-appropriate commands to delete or rename files/directories, or other file system operations. +- If your code changes add new dependencies, suggest the command to install them. +- Etc. + +""" # noqa diff --git a/aider/coders/udiff_coder.py b/aider/coders/udiff_coder.py index 7c276408b..fff6971b7 100644 --- a/aider/coders/udiff_coder.py +++ b/aider/coders/udiff_coder.py @@ -348,8 +348,8 @@ def process_fenced_block(lines, start_line_num): a_fname = block[0][4:].strip() b_fname = block[1][4:].strip() - # Check if standard git diff prefixes are present and strip them - if a_fname.startswith("a/") and b_fname.startswith("b/"): + # Check if standard git diff prefixes are present (or /dev/null) and strip them + if (a_fname.startswith("a/") or a_fname == "/dev/null") and b_fname.startswith("b/"): fname = b_fname[2:] else: # Otherwise, assume the path is as intended diff --git a/aider/coders/udiff_prompts.py b/aider/coders/udiff_prompts.py index 5e7ca2c13..23d2d8f73 100644 --- a/aider/coders/udiff_prompts.py +++ b/aider/coders/udiff_prompts.py @@ -1,19 +1,18 @@ # flake8: noqa: E501 +from . import shell from .base_prompts import CoderPrompts class UnifiedDiffPrompts(CoderPrompts): main_system = """Act as an expert software developer. -{lazy_prompt} +{final_reminders} Always use best practices when coding. Respect and use existing conventions, libraries, etc that are already present in the code base. Take requests for changes to the supplied code. If the request is ambiguous, ask questions. -Always reply to the user in {language}. - For each file that needs to be changed, write out the changes similar to a unified diff like `diff -U0` would produce. """ @@ -106,5 +105,9 @@ To move code within a file, use 2 hunks: 1 to delete it from its current locatio To make a new file, show a diff from `--- /dev/null` to `+++ path/to/new/file.ext`. -{lazy_prompt} +{final_reminders} """ + + shell_cmd_prompt = shell.shell_cmd_prompt + no_shell_cmd_prompt = shell.no_shell_cmd_prompt + shell_cmd_reminder = shell.shell_cmd_reminder diff --git a/aider/coders/udiff_simple.py b/aider/coders/udiff_simple.py new file mode 100644 index 000000000..9cc51991d --- /dev/null +++ b/aider/coders/udiff_simple.py @@ -0,0 +1,14 @@ +from .udiff_coder import UnifiedDiffCoder +from .udiff_simple_prompts import UnifiedDiffSimplePrompts + + +class UnifiedDiffSimpleCoder(UnifiedDiffCoder): + """ + A coder that uses unified diff format for code modifications. + This variant uses a simpler prompt that doesn't mention specific + diff rules like using `@@ ... @@` lines or avoiding line numbers. + """ + + edit_format = "udiff-simple" + + gpt_prompts = UnifiedDiffSimplePrompts() diff --git a/aider/coders/udiff_simple_prompts.py b/aider/coders/udiff_simple_prompts.py new file mode 100644 index 000000000..cd3160e58 --- /dev/null +++ b/aider/coders/udiff_simple_prompts.py @@ -0,0 +1,25 @@ +from .udiff_prompts import UnifiedDiffPrompts + + +class UnifiedDiffSimplePrompts(UnifiedDiffPrompts): + """ + Prompts for the UnifiedDiffSimpleCoder. + Inherits from UnifiedDiffPrompts and can override specific prompts + if a simpler wording is desired for this edit format. + """ + + example_messages = [] + + system_reminder = """# File editing rules: + +Return edits similar to unified diffs that `diff -U0` would produce. + +The user's patch tool needs CORRECT patches that apply cleanly against the current contents of the file! +Think carefully and make sure you include and mark all lines that need to be removed or changed as `-` lines. +Make sure you mark all new or modified lines with `+`. +Don't leave out any lines or the diff patch won't apply correctly. + +To make a new file, show a diff from `--- /dev/null` to `+++ path/to/new/file.ext`. + +{final_reminders} +""" # noqa diff --git a/aider/coders/wholefile_prompts.py b/aider/coders/wholefile_prompts.py index 95a4bb87b..2f3868d6b 100644 --- a/aider/coders/wholefile_prompts.py +++ b/aider/coders/wholefile_prompts.py @@ -7,10 +7,7 @@ class WholeFilePrompts(CoderPrompts): main_system = """Act as an expert software developer. Take requests for changes to the supplied code. If the request is ambiguous, ask questions. - -Always reply to the user in {language}. - -{lazy_prompt} +{final_reminders} Once you understand the request you MUST: 1. Determine if any code changes are needed. 2. Explain any needed changes. @@ -61,7 +58,7 @@ To suggest changes to a file you MUST return a *file listing* that contains the *NEVER* skip, omit or elide content from a *file listing* using "..." or by adding comments like "... rest of code..."! Create a new file you MUST return a *file listing* which includes an appropriate filename, including any appropriate path. -{lazy_prompt} +{final_reminders} """ redacted_edit_message = "No changes are needed." diff --git a/aider/commands.py b/aider/commands.py index 81fc80093..b9a3d3c2a 100644 --- a/aider/commands.py +++ b/aider/commands.py @@ -47,6 +47,7 @@ class Commands: parser=self.parser, verbose=self.verbose, editor=self.editor, + original_read_only_fnames=self.original_read_only_fnames, ) def __init__( @@ -87,6 +88,11 @@ class Commands: "Switch the Main Model to a new LLM" model_name = args.strip() + if not model_name: + announcements = "\n".join(self.coder.get_announcements()) + self.io.tool_output(announcements) + return + model = models.Model( model_name, editor_model=self.coder.main_model.editor_model.name, @@ -220,12 +226,18 @@ class Commands: self.io.tool_output(f"Scraping {url}...") if not self.scraper: - res = install_playwright(self.io) - if not res: - self.io.tool_warning("Unable to initialize playwright.") + disable_playwright = getattr(self.args, "disable_playwright", False) + if disable_playwright: + res = False + else: + res = install_playwright(self.io) + if not res: + self.io.tool_warning("Unable to initialize playwright.") self.scraper = Scraper( - print_error=self.io.tool_error, playwright_available=res, verify_ssl=self.verify_ssl + print_error=self.io.tool_error, + playwright_available=res, + verify_ssl=self.verify_ssl, ) content = self.scraper.scrape(url) or "" @@ -339,7 +351,7 @@ class Commands: return commit_message = args.strip() if args else None - self.coder.repo.commit(message=commit_message) + self.coder.repo.commit(message=commit_message, coder=self.coder) def cmd_lint(self, args="", fnames=None): "Lint and fix in-chat files or all dirty files if none in chat" @@ -400,6 +412,7 @@ class Commands: "Clear the chat history" self._clear_chat_history() + self.io.tool_output("All chat history cleared.") def _drop_all_files(self): self.coder.abs_fnames = set() @@ -556,6 +569,7 @@ class Commands: last_commit_hash = self.coder.repo.get_head_commit_sha(short=True) last_commit_message = self.coder.repo.get_head_commit_message("(unknown)").strip() + last_commit_message = (last_commit_message.splitlines() or [""])[0] if last_commit_hash not in self.coder.aider_commit_hashes: self.io.tool_error("The last commit was not made by aider in this chat session.") self.io.tool_output( @@ -634,6 +648,7 @@ class Commands: # Get the current HEAD after undo current_head_hash = self.coder.repo.get_head_commit_sha(short=True) current_head_message = self.coder.repo.get_head_commit_message("(unknown)").strip() + current_head_message = (current_head_message.splitlines() or [""])[0] self.io.tool_output(f"Now at: {current_head_hash} {current_head_message}") if self.coder.main_model.send_undo_reply: @@ -837,7 +852,11 @@ class Commands: ) continue - if self.coder.repo and self.coder.repo.git_ignored_file(matched_file): + if ( + self.coder.repo + and self.coder.repo.git_ignored_file(matched_file) + and not self.coder.add_gitignore_files + ): self.io.tool_error(f"Can't add {matched_file} which is in gitignore") continue @@ -1305,12 +1324,23 @@ class Commands: # First collect all expanded paths for pattern in filenames: expanded_pattern = expanduser(pattern) - if os.path.isabs(expanded_pattern): - # For absolute paths, glob it - matches = list(glob.glob(expanded_pattern)) + path_obj = Path(expanded_pattern) + is_abs = path_obj.is_absolute() + if not is_abs: + path_obj = Path(self.coder.root) / path_obj + + matches = [] + # Check for literal path existence first + if path_obj.exists(): + matches = [path_obj] else: - # For relative paths and globs, use glob from the root directory - matches = list(Path(self.coder.root).glob(expanded_pattern)) + # If literal path doesn't exist, try globbing + if is_abs: + # For absolute paths, glob it + matches = [Path(p) for p in glob.glob(expanded_pattern)] + else: + # For relative paths and globs, use glob from the root directory + matches = list(Path(self.coder.root).glob(expanded_pattern)) if not matches: self.io.tool_error(f"No matches found for: {pattern}") @@ -1385,7 +1415,30 @@ class Commands: "Print out the current settings" settings = format_settings(self.parser, self.args) announcements = "\n".join(self.coder.get_announcements()) + + # Build metadata for the active models (main, editor, weak) + model_sections = [] + active_models = [ + ("Main model", self.coder.main_model), + ("Editor model", getattr(self.coder.main_model, "editor_model", None)), + ("Weak model", getattr(self.coder.main_model, "weak_model", None)), + ] + for label, model in active_models: + if not model: + continue + info = getattr(model, "info", {}) or {} + if not info: + continue + model_sections.append(f"{label} ({model.name}):") + for k, v in sorted(info.items()): + model_sections.append(f" {k}: {v}") + model_sections.append("") # blank line between models + + model_metadata = "\n".join(model_sections) + output = f"{announcements}\n{settings}" + if model_metadata: + output += "\n" + model_metadata self.io.tool_output(output) def completions_raw_load(self, document, complete_event): @@ -1507,7 +1560,7 @@ class Commands: return self.cmd_editor(args) def cmd_think_tokens(self, args): - "Set the thinking token budget (supports formats like 8096, 8k, 10.5k, 0.5M)" + """Set the thinking token budget, eg: 8096, 8k, 10.5k, 0.5M, or 0 to disable.""" model = self.coder.main_model if not args.strip(): @@ -1525,10 +1578,16 @@ class Commands: value = args.strip() model.set_thinking_tokens(value) - formatted_budget = model.get_thinking_tokens() - budget = model.get_raw_thinking_tokens() + # Handle the special case of 0 to disable thinking tokens + if value == "0": + self.io.tool_output("Thinking tokens disabled.") + else: + formatted_budget = model.get_thinking_tokens() + budget = model.get_raw_thinking_tokens() + self.io.tool_output( + f"Set thinking token budget to {budget:,} tokens ({formatted_budget})." + ) - self.io.tool_output(f"Set thinking token budget to {budget:,} tokens ({formatted_budget}).") self.io.tool_output() # Output announcements diff --git a/aider/exceptions.py b/aider/exceptions.py index a81a058e0..c2d0feb3b 100644 --- a/aider/exceptions.py +++ b/aider/exceptions.py @@ -20,6 +20,7 @@ EXCEPTIONS = [ "The API provider is not able to authenticate you. Check your API key.", ), ExInfo("AzureOpenAIError", True, None), + ExInfo("BadGatewayError", True, "The API provider's servers are down or overloaded."), ExInfo("BadRequestError", False, None), ExInfo("BudgetExceededError", True, None), ExInfo( @@ -28,6 +29,8 @@ EXCEPTIONS = [ "The API provider has refused the request due to a safety policy about the content.", ), ExInfo("ContextWindowExceededError", False, None), # special case handled in base_coder + ExInfo("ErrorEventError", True, None), + ExInfo("ImageFetchError", False, "The API provider was unable to fetch one or more images."), ExInfo("InternalServerError", True, "The API provider's servers are down or overloaded."), ExInfo("InvalidRequestError", True, None), ExInfo("JSONSchemaValidationError", True, None), diff --git a/aider/gui.py b/aider/gui.py index 7fa90bc38..6c5b012dc 100755 --- a/aider/gui.py +++ b/aider/gui.py @@ -11,7 +11,7 @@ from aider.coders import Coder from aider.dump import dump # noqa: F401 from aider.io import InputOutput from aider.main import main as cli_main -from aider.scrape import Scraper +from aider.scrape import Scraper, has_playwright class CaptureIO(InputOutput): @@ -484,7 +484,7 @@ class GUI: url = self.web_content if not self.state.scraper: - self.scraper = Scraper(print_error=self.info) + self.scraper = Scraper(print_error=self.info, playwright_available=has_playwright()) content = self.scraper.scrape(url) or "" if content.strip(): diff --git a/aider/history.py b/aider/history.py index a4727b941..8d0bce7b3 100644 --- a/aider/history.py +++ b/aider/history.py @@ -63,37 +63,37 @@ class ChatSummary: if split_index <= min_split: return self.summarize_all(messages) - head = messages[:split_index] + # Split head and tail tail = messages[split_index:] - sized = sized[:split_index] - head.reverse() - sized.reverse() + # Only size the head once + sized_head = sized[:split_index] + + # Precompute token limit (fallback to 4096 if undefined) + model_max_input_tokens = self.models[0].info.get("max_input_tokens") or 4096 + model_max_input_tokens -= 512 # reserve buffer for safety + keep = [] total = 0 - # These sometimes come set with value = None - model_max_input_tokens = self.models[0].info.get("max_input_tokens") or 4096 - model_max_input_tokens -= 512 - - for i in range(split_index): - total += sized[i][0] + # Iterate in original order, summing tokens until limit + for tokens, msg in sized_head: + total += tokens if total > model_max_input_tokens: break - keep.append(head[i]) - - keep.reverse() + keep.append(msg) + # No need to reverse lists back and forth summary = self.summarize_all(keep) - tail_tokens = sum(tokens for tokens, msg in sized[split_index:]) + # If the combined summary and tail still fits, return directly summary_tokens = self.token_count(summary) - - result = summary + tail + tail_tokens = sum(tokens for tokens, _ in sized[split_index:]) if summary_tokens + tail_tokens < self.max_tokens: - return result + return summary + tail - return self.summarize_real(result, depth + 1) + # Otherwise recurse with increased depth + return self.summarize_real(summary + tail, depth + 1) def summarize_all(self, messages): content = "" diff --git a/aider/io.py b/aider/io.py index 08c03ef53..ed6f22d51 100644 --- a/aider/io.py +++ b/aider/io.py @@ -308,6 +308,12 @@ class InputOutput: self.yes = yes self.input_history_file = input_history_file + if self.input_history_file: + try: + Path(self.input_history_file).parent.mkdir(parents=True, exist_ok=True) + except (PermissionError, OSError) as e: + self.tool_warning(f"Could not create directory for input history: {e}") + self.input_history_file = None self.llm_history_file = llm_history_file if chat_history_file is not None: self.chat_history_file = Path(chat_history_file) @@ -595,7 +601,7 @@ class InputOutput: current_text = buffer.text # Open the editor with the current text - edited_text = pipe_editor(input_data=current_text) + edited_text = pipe_editor(input_data=current_text, suffix="md") # Replace the buffer with the edited text, strip any trailing newlines buffer.text = edited_text.rstrip("\n") @@ -749,9 +755,14 @@ class InputOutput: if not self.llm_history_file: return timestamp = datetime.now().isoformat(timespec="seconds") - with open(self.llm_history_file, "a", encoding=self.encoding) as log_file: - log_file.write(f"{role.upper()} {timestamp}\n") - log_file.write(content + "\n") + try: + Path(self.llm_history_file).parent.mkdir(parents=True, exist_ok=True) + with open(self.llm_history_file, "a", encoding="utf-8") as log_file: + log_file.write(f"{role.upper()} {timestamp}\n") + log_file.write(content + "\n") + except (PermissionError, OSError) as err: + self.tool_warning(f"Unable to write to llm history file {self.llm_history_file}: {err}") + self.llm_history_file = None def display_user_input(self, inp): if self.pretty and self.user_input_color: @@ -1001,7 +1012,11 @@ class InputOutput: self.console.print(*messages, style=style) def get_assistant_mdstream(self): - mdargs = dict(style=self.assistant_output_color, code_theme=self.code_theme) + mdargs = dict( + style=self.assistant_output_color, + code_theme=self.code_theme, + inline_code_lexer="text", + ) mdStream = MarkdownStream(mdargs=mdargs) return mdStream @@ -1112,6 +1127,7 @@ class InputOutput: text += "\n" if self.chat_history_file is not None: try: + self.chat_history_file.parent.mkdir(parents=True, exist_ok=True) with self.chat_history_file.open("a", encoding=self.encoding, errors="ignore") as f: f.write(text) except (PermissionError, OSError) as err: @@ -1144,18 +1160,19 @@ class InputOutput: ro_paths = [] for rel_path in read_only_files: abs_path = os.path.abspath(os.path.join(self.root, rel_path)) - ro_paths.append(abs_path if len(abs_path) < len(rel_path) else rel_path) + ro_paths.append(Text(abs_path if len(abs_path) < len(rel_path) else rel_path)) - files_with_label = ["Readonly:"] + ro_paths + files_with_label = [Text("Readonly:")] + ro_paths read_only_output = StringIO() Console(file=read_only_output, force_terminal=False).print(Columns(files_with_label)) read_only_lines = read_only_output.getvalue().splitlines() console.print(Columns(files_with_label)) if editable_files: - files_with_label = editable_files + text_editable_files = [Text(f) for f in editable_files] + files_with_label = text_editable_files if read_only_files: - files_with_label = ["Editable:"] + editable_files + files_with_label = [Text("Editable:")] + text_editable_files editable_output = StringIO() Console(file=editable_output, force_terminal=False).print(Columns(files_with_label)) editable_lines = editable_output.getvalue().splitlines() diff --git a/aider/linter.py b/aider/linter.py index 920a8b7c6..d386696e5 100644 --- a/aider/linter.py +++ b/aider/linter.py @@ -4,10 +4,10 @@ import subprocess import sys import traceback import warnings -import shlex from dataclasses import dataclass from pathlib import Path +import oslex from grep_ast import TreeContext, filename_to_lang from grep_ast.tsl import get_parser # noqa: E402 @@ -45,7 +45,7 @@ class Linter: return fname def run_cmd(self, cmd, rel_fname, code): - cmd += " " + shlex.quote(rel_fname) + cmd += " " + oslex.quote(rel_fname) returncode = 0 stdout = "" diff --git a/aider/main.py b/aider/main.py index 89286e1de..afb3f8366 100644 --- a/aider/main.py +++ b/aider/main.py @@ -14,6 +14,7 @@ except ImportError: git = None import importlib_resources +import shtab from dotenv import load_dotenv from prompt_toolkit.enums import EditingMode @@ -502,6 +503,12 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F # Parse again to include any arguments that might have been defined in .env args = parser.parse_args(argv) + if args.shell_completions: + # Ensure parser.prog is set for shtab, though it should be by default + parser.prog = "aider" + print(shtab.complete(parser, shell=args.shell_completions)) + sys.exit(0) + if git is None: args.git = False @@ -626,7 +633,12 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F ) os.environ["OPENAI_ORGANIZATION"] = args.openai_organization_id - analytics = Analytics(logfile=args.analytics_log, permanently_disable=args.analytics_disable) + analytics = Analytics( + logfile=args.analytics_log, + permanently_disable=args.analytics_disable, + posthog_host=args.analytics_posthog_host, + posthog_project_api_key=args.analytics_posthog_project_api_key, + ) if args.analytics is not False: if analytics.need_to_ask(args.analytics): io.tool_output( @@ -904,6 +916,7 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F commit_prompt=args.commit_prompt, subtree_only=args.subtree_only, git_commit_verify=args.git_commit_verify, + attribute_co_authored_by=args.attribute_co_authored_by, # Pass the arg ) except FileNotFoundError: pass @@ -913,8 +926,9 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F analytics.event("exit", reason="Repository sanity check failed") return 1 - if repo: - analytics.event("repo", num_files=len(repo.get_tracked_files())) + if repo and not args.skip_sanity_check_repo: + num_files = len(repo.get_tracked_files()) + analytics.event("repo", num_files=num_files) else: analytics.event("no-repo") @@ -985,9 +999,11 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F num_cache_warming_pings=args.cache_keepalive_pings, suggest_shell_commands=args.suggest_shell_commands, chat_language=args.chat_language, + commit_language=args.commit_language, detect_urls=args.detect_urls, auto_copy_context=args.copy_paste, auto_accept_architect=args.auto_accept_architect, + add_gitignore_files=args.add_gitignore_files, ) except UnknownEditFormat as err: io.tool_error(str(err)) diff --git a/aider/mdstream.py b/aider/mdstream.py index 24c14f0d4..774b247c2 100755 --- a/aider/mdstream.py +++ b/aider/mdstream.py @@ -115,9 +115,9 @@ class MarkdownStream: else: self.mdargs = dict() - # Initialize rich Live display with empty text - self.live = Live(Text(""), refresh_per_second=1.0 / self.min_delay) - self.live.start() + # Defer Live creation until the first update. + self.live = None + self._live_started = False def _render_markdown_to_lines(self, text): """Render markdown text to a list of lines. @@ -163,6 +163,12 @@ class MarkdownStream: Markdown going to the console works better in terminal scrollback buffers. The live window doesn't play nice with terminal scrollback. """ + # On the first call, stop the spinner and start the Live renderer + if not getattr(self, "_live_started", False): + self.live = Live(Text(""), refresh_per_second=1.0 / self.min_delay) + self.live.start() + self._live_started = True + now = time.time() # Throttle updates to maintain smooth rendering if not final and now - self.when < self.min_delay: diff --git a/aider/models.py b/aider/models.py index a31061f87..db0c28d1e 100644 --- a/aider/models.py +++ b/aider/models.py @@ -8,6 +8,7 @@ import platform import sys import time from dataclasses import dataclass, fields +from datetime import datetime from pathlib import Path from typing import Optional, Union @@ -15,8 +16,10 @@ import json5 import yaml from PIL import Image +from aider import __version__ from aider.dump import dump # noqa: F401 from aider.llm import litellm +from aider.openrouter import OpenRouterModelManager from aider.sendchat import ensure_alternating_roles, sanity_check_messages from aider.utils import check_pip_install_extra @@ -69,6 +72,8 @@ claude-3-opus-20240229 claude-3-sonnet-20240229 claude-3-5-sonnet-20240620 claude-3-5-sonnet-20241022 +claude-sonnet-4-20250514 +claude-opus-4-20250514 """ ANTHROPIC_MODELS = [ln.strip() for ln in ANTHROPIC_MODELS.splitlines() if ln.strip()] @@ -76,9 +81,9 @@ ANTHROPIC_MODELS = [ln.strip() for ln in ANTHROPIC_MODELS.splitlines() if ln.str # Mapping of model aliases to their canonical names MODEL_ALIASES = { # Claude models - "sonnet": "anthropic/claude-3-7-sonnet-20250219", + "sonnet": "anthropic/claude-sonnet-4-20250514", "haiku": "claude-3-5-haiku-20241022", - "opus": "claude-3-opus-20240229", + "opus": "claude-opus-4-20250514", # GPT models "4": "gpt-4-0613", "4o": "gpt-4o", @@ -88,11 +93,13 @@ MODEL_ALIASES = { "3": "gpt-3.5-turbo", # Other models "deepseek": "deepseek/deepseek-chat", - "flash": "gemini/gemini-2.0-flash-exp", + "flash": "gemini/gemini-2.5-flash", + "flash-lite": "gemini/gemini-2.5-flash-lite", "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-preview-03-25", + "gemini-2.5-pro": "gemini/gemini-2.5-pro", + "gemini-3-pro-preview": "gemini/gemini-3-pro-preview", + "gemini": "gemini/gemini-3-pro-preview", "gemini-exp": "gemini/gemini-2.5-pro-exp-03-25", "grok3": "xai/grok-3-beta", "optimus": "openrouter/openrouter/optimus-alpha", @@ -149,8 +156,13 @@ class ModelInfoManager: self.verify_ssl = True self._cache_loaded = False + # Manager for the cached OpenRouter model database + self.openrouter_manager = OpenRouterModelManager() + def set_verify_ssl(self, verify_ssl): self.verify_ssl = verify_ssl + if hasattr(self, "openrouter_manager"): + self.openrouter_manager.set_verify_ssl(verify_ssl) def _load_cache(self): if self._cache_loaded: @@ -231,8 +243,68 @@ class ModelInfoManager: if litellm_info: return litellm_info + if not cached_info and model.startswith("openrouter/"): + # First try using the locally cached OpenRouter model database + openrouter_info = self.openrouter_manager.get_model_info(model) + if openrouter_info: + return openrouter_info + + # Fallback to legacy web-scraping if the API cache does not contain the model + openrouter_info = self.fetch_openrouter_model_info(model) + if openrouter_info: + return openrouter_info + return cached_info + def fetch_openrouter_model_info(self, model): + """ + Fetch model info by scraping the openrouter model page. + Expected URL: https://openrouter.ai/ + Example: openrouter/qwen/qwen-2.5-72b-instruct:free + Returns a dict with keys: max_tokens, max_input_tokens, max_output_tokens, + input_cost_per_token, output_cost_per_token. + """ + url_part = model[len("openrouter/") :] + url = "https://openrouter.ai/" + url_part + try: + import requests + + response = requests.get(url, timeout=5, verify=self.verify_ssl) + if response.status_code != 200: + return {} + html = response.text + import re + + if re.search( + rf"The model\s*.*{re.escape(url_part)}.* is not available", html, re.IGNORECASE + ): + print(f"\033[91mError: Model '{url_part}' is not available\033[0m") + return {} + text = re.sub(r"<[^>]+>", " ", html) + context_match = re.search(r"([\d,]+)\s*context", text) + if context_match: + context_str = context_match.group(1).replace(",", "") + context_size = int(context_str) + else: + context_size = None + input_cost_match = re.search(r"\$\s*([\d.]+)\s*/M input tokens", text, re.IGNORECASE) + output_cost_match = re.search(r"\$\s*([\d.]+)\s*/M output tokens", text, re.IGNORECASE) + input_cost = float(input_cost_match.group(1)) / 1000000 if input_cost_match else None + output_cost = float(output_cost_match.group(1)) / 1000000 if output_cost_match else None + if context_size is None or input_cost is None or output_cost is None: + return {} + params = { + "max_input_tokens": context_size, + "max_tokens": context_size, + "max_output_tokens": context_size, + "input_cost_per_token": input_cost, + "output_cost_per_token": output_cost, + } + return params + except Exception as e: + print("Error fetching openrouter info:", str(e)) + return {} + model_info_manager = ModelInfoManager() @@ -332,6 +404,15 @@ class Model(ModelSettings): # For non-dict values, simply update self.extra_params[key] = value + # Ensure OpenRouter models accept thinking_tokens and reasoning_effort + if self.name.startswith("openrouter/"): + if self.accepts_settings is None: + self.accepts_settings = [] + if "thinking_tokens" not in self.accepts_settings: + self.accepts_settings.append("thinking_tokens") + if "reasoning_effort" not in self.accepts_settings: + self.accepts_settings.append("reasoning_effort") + def apply_generic_model_settings(self, model): if "/o3-mini" in model: self.edit_format = "diff" @@ -357,6 +438,14 @@ class Model(ModelSettings): self.examples_as_sys_msg = False return # <-- + last_segment = model.split("/")[-1] + if last_segment in ("gpt-5", "gpt-5-2025-08-07"): + self.use_temperature = False + self.edit_format = "diff" + if "reasoning_effort" not in self.accepts_settings: + self.accepts_settings.append("reasoning_effort") + return # <-- + if "/o1-mini" in model: self.use_repo_map = True self.use_temperature = False @@ -460,6 +549,14 @@ class Model(ModelSettings): self.extra_params = dict(top_p=0.95) return # <-- + if "qwen3" in model and "235b" in model: + self.edit_format = "diff" + self.use_repo_map = True + self.system_prompt_prefix = "/no_think" + self.use_temperature = 0.7 + self.extra_params = {"top_p": 0.8, "top_k": 20, "min_p": 0.0} + return # <-- + # use the defaults if self.edit_format == "diff": self.use_repo_map = True @@ -659,11 +756,18 @@ class Model(ModelSettings): def set_reasoning_effort(self, effort): """Set the reasoning effort parameter for models that support it""" if effort is not None: - if not self.extra_params: - self.extra_params = {} - if "extra_body" not in self.extra_params: - self.extra_params["extra_body"] = {} - self.extra_params["extra_body"]["reasoning_effort"] = effort + if self.name.startswith("openrouter/"): + if not self.extra_params: + self.extra_params = {} + if "extra_body" not in self.extra_params: + self.extra_params["extra_body"] = {} + self.extra_params["extra_body"]["reasoning"] = {"effort": effort} + else: + if not self.extra_params: + self.extra_params = {} + if "extra_body" not in self.extra_params: + self.extra_params["extra_body"] = {} + self.extra_params["extra_body"]["reasoning_effort"] = effort def parse_token_value(self, value): """ @@ -700,6 +804,7 @@ class Model(ModelSettings): """ Set the thinking token budget for models that support it. Accepts formats: 8096, "8k", "10.5k", "0.5M", "10K", etc. + Pass "0" to disable thinking tokens. """ if value is not None: num_tokens = self.parse_token_value(value) @@ -709,9 +814,19 @@ class Model(ModelSettings): # OpenRouter models use 'reasoning' instead of 'thinking' if self.name.startswith("openrouter/"): - self.extra_params["reasoning"] = {"max_tokens": num_tokens} + if "extra_body" not in self.extra_params: + self.extra_params["extra_body"] = {} + if num_tokens > 0: + self.extra_params["extra_body"]["reasoning"] = {"max_tokens": num_tokens} + else: + if "reasoning" in self.extra_params["extra_body"]: + del self.extra_params["extra_body"]["reasoning"] else: - self.extra_params["thinking"] = {"type": "enabled", "budget_tokens": num_tokens} + if num_tokens > 0: + self.extra_params["thinking"] = {"type": "enabled", "budget_tokens": num_tokens} + else: + if "thinking" in self.extra_params: + del self.extra_params["thinking"] def get_raw_thinking_tokens(self): """Get formatted thinking token budget if available""" @@ -719,8 +834,13 @@ class Model(ModelSettings): if self.extra_params: # Check for OpenRouter reasoning format - if "reasoning" in self.extra_params and "max_tokens" in self.extra_params["reasoning"]: - budget = self.extra_params["reasoning"]["max_tokens"] + if self.name.startswith("openrouter/"): + if ( + "extra_body" in self.extra_params + and "reasoning" in self.extra_params["extra_body"] + and "max_tokens" in self.extra_params["extra_body"]["reasoning"] + ): + budget = self.extra_params["extra_body"]["reasoning"]["max_tokens"] # Check for standard thinking format elif ( "thinking" in self.extra_params and "budget_tokens" in self.extra_params["thinking"] @@ -750,12 +870,21 @@ class Model(ModelSettings): def get_reasoning_effort(self): """Get reasoning effort value if available""" - if ( - self.extra_params - and "extra_body" in self.extra_params - and "reasoning_effort" in self.extra_params["extra_body"] - ): - return self.extra_params["extra_body"]["reasoning_effort"] + if self.extra_params: + # Check for OpenRouter reasoning format + if self.name.startswith("openrouter/"): + if ( + "extra_body" in self.extra_params + and "reasoning" in self.extra_params["extra_body"] + and "effort" in self.extra_params["extra_body"]["reasoning"] + ): + return self.extra_params["extra_body"]["reasoning"]["effort"] + # Check for standard reasoning_effort format (e.g. in extra_body) + elif ( + "extra_body" in self.extra_params + and "reasoning_effort" in self.extra_params["extra_body"] + ): + return self.extra_params["extra_body"]["reasoning_effort"] return None def is_deepseek_r1(self): @@ -767,6 +896,57 @@ class Model(ModelSettings): def is_ollama(self): return self.name.startswith("ollama/") or self.name.startswith("ollama_chat/") + def github_copilot_token_to_open_ai_key(self, extra_headers): + # check to see if there's an openai api key + # If so, check to see if it's expire + openai_api_key = "OPENAI_API_KEY" + + if openai_api_key not in os.environ or ( + int(dict(x.split("=") for x in os.environ[openai_api_key].split(";"))["exp"]) + < int(datetime.now().timestamp()) + ): + import requests + + class GitHubCopilotTokenError(Exception): + """Custom exception for GitHub Copilot token-related errors.""" + + pass + + # Validate GitHub Copilot token exists + if "GITHUB_COPILOT_TOKEN" not in os.environ: + raise KeyError("GITHUB_COPILOT_TOKEN environment variable not found") + + github_token = os.environ["GITHUB_COPILOT_TOKEN"] + if not github_token.strip(): + raise KeyError("GITHUB_COPILOT_TOKEN environment variable is empty") + + headers = { + "Authorization": f"Bearer {os.environ['GITHUB_COPILOT_TOKEN']}", + "Editor-Version": extra_headers["Editor-Version"], + "Copilot-Integration-Id": extra_headers["Copilot-Integration-Id"], + "Content-Type": "application/json", + } + + url = "https://api.github.com/copilot_internal/v2/token" + res = requests.get(url, headers=headers) + if res.status_code != 200: + safe_headers = {k: v for k, v in headers.items() if k != "Authorization"} + token_preview = github_token[:5] + "..." if len(github_token) >= 5 else github_token + safe_headers["Authorization"] = f"Bearer {token_preview}" + raise GitHubCopilotTokenError( + f"GitHub Copilot API request failed (Status: {res.status_code})\n" + f"URL: {url}\n" + f"Headers: {json.dumps(safe_headers, indent=2)}\n" + f"JSON: {res.text}" + ) + + response_data = res.json() + token = response_data.get("token") + if not token: + raise GitHubCopilotTokenError("Response missing 'token' field") + + os.environ[openai_api_key] = token + def send_completion(self, messages, functions, stream, temperature=None): if os.environ.get("AIDER_SANITY_CHECK_TURNS"): sanity_check_messages(messages) @@ -808,6 +988,16 @@ class Model(ModelSettings): dump(kwargs) kwargs["messages"] = messages + # Are we using github copilot? + if "GITHUB_COPILOT_TOKEN" in os.environ: + if "extra_headers" not in kwargs: + kwargs["extra_headers"] = { + "Editor-Version": f"aider/{__version__}", + "Copilot-Integration-Id": "vscode-chat", + } + + self.github_copilot_token_to_open_ai_key(kwargs["extra_headers"]) + res = litellm.completion(**kwargs) return hash_object, res @@ -819,6 +1009,9 @@ class Model(ModelSettings): messages = ensure_alternating_roles(messages) retry_delay = 0.125 + if self.verbose: + dump(messages) + while True: try: kwargs = { @@ -869,12 +1062,10 @@ def register_models(model_settings_fnames): for model_settings_dict in model_settings_list: model_settings = ModelSettings(**model_settings_dict) - existing_model_settings = next( - (ms for ms in MODEL_SETTINGS if ms.name == model_settings.name), None - ) - if existing_model_settings: - MODEL_SETTINGS.remove(existing_model_settings) + # Remove all existing settings for this model name + MODEL_SETTINGS[:] = [ms for ms in MODEL_SETTINGS if ms.name != model_settings.name] + # Add the new settings MODEL_SETTINGS.append(model_settings) except Exception as e: raise Exception(f"Error loading model settings from {model_settings_fname}: {e}") diff --git a/aider/onboarding.py b/aider/onboarding.py index 0321c0d63..9b6abd54b 100644 --- a/aider/onboarding.py +++ b/aider/onboarding.py @@ -55,9 +55,9 @@ def try_to_select_default_model(): # Check if the user is on a free tier is_free_tier = check_openrouter_tier(openrouter_key) if is_free_tier: - return "openrouter/google/gemini-2.5-pro-exp-03-25:free" + return "openrouter/deepseek/deepseek-r1:free" else: - return "openrouter/anthropic/claude-3.7-sonnet" + return "openrouter/anthropic/claude-sonnet-4" # Select model based on other available API keys model_key_pairs = [ diff --git a/aider/openrouter.py b/aider/openrouter.py new file mode 100644 index 000000000..6517cb152 --- /dev/null +++ b/aider/openrouter.py @@ -0,0 +1,128 @@ +""" +OpenRouter model metadata caching and lookup. + +This module keeps a local cached copy of the OpenRouter model list +(downloaded from ``https://openrouter.ai/api/v1/models``) and exposes a +helper class that returns metadata for a given model in a format compatible +with litellm’s ``get_model_info``. +""" +from __future__ import annotations + +import json +import time +from pathlib import Path +from typing import Dict + +import requests + + +def _cost_per_token(val: str | None) -> float | None: + """Convert a price string (USD per token) to a float.""" + if val in (None, "", "0"): + return 0.0 if val == "0" else None + try: + return float(val) + except Exception: # noqa: BLE001 + return None + + +class OpenRouterModelManager: + MODELS_URL = "https://openrouter.ai/api/v1/models" + CACHE_TTL = 60 * 60 * 24 # 24 h + + def __init__(self) -> None: + self.cache_dir = Path.home() / ".aider" / "caches" + self.cache_file = self.cache_dir / "openrouter_models.json" + self.content: Dict | None = None + self.verify_ssl: bool = True + self._cache_loaded = False + + # ------------------------------------------------------------------ # + # Public API # + # ------------------------------------------------------------------ # + def set_verify_ssl(self, verify_ssl: bool) -> None: + """Enable/disable SSL verification for API requests.""" + self.verify_ssl = verify_ssl + + def get_model_info(self, model: str) -> Dict: + """ + Return metadata for *model* or an empty ``dict`` when unknown. + + ``model`` should use the aider naming convention, e.g. + ``openrouter/nousresearch/deephermes-3-mistral-24b-preview:free``. + """ + self._ensure_content() + if not self.content or "data" not in self.content: + return {} + + route = self._strip_prefix(model) + + # Consider both the exact id and id without any β€œ:suffix”. + candidates = {route} + if ":" in route: + candidates.add(route.split(":", 1)[0]) + + record = next((item for item in self.content["data"] if item.get("id") in candidates), None) + if not record: + return {} + + context_len = ( + record.get("top_provider", {}).get("context_length") + or record.get("context_length") + or None + ) + + pricing = record.get("pricing", {}) + return { + "max_input_tokens": context_len, + "max_tokens": context_len, + "max_output_tokens": context_len, + "input_cost_per_token": _cost_per_token(pricing.get("prompt")), + "output_cost_per_token": _cost_per_token(pricing.get("completion")), + "litellm_provider": "openrouter", + } + + # ------------------------------------------------------------------ # + # Internal helpers # + # ------------------------------------------------------------------ # + def _strip_prefix(self, model: str) -> str: + return model[len("openrouter/") :] if model.startswith("openrouter/") else model + + def _ensure_content(self) -> None: + self._load_cache() + if not self.content: + self._update_cache() + + def _load_cache(self) -> None: + if self._cache_loaded: + return + try: + self.cache_dir.mkdir(parents=True, exist_ok=True) + if self.cache_file.exists(): + cache_age = time.time() - self.cache_file.stat().st_mtime + if cache_age < self.CACHE_TTL: + try: + self.content = json.loads(self.cache_file.read_text()) + except json.JSONDecodeError: + self.content = None + except OSError: + # Cache directory might be unwritable; ignore. + pass + + self._cache_loaded = True + + def _update_cache(self) -> None: + try: + response = requests.get(self.MODELS_URL, timeout=10, verify=self.verify_ssl) + if response.status_code == 200: + self.content = response.json() + try: + self.cache_file.write_text(json.dumps(self.content, indent=2)) + except OSError: + pass # Non-fatal if we can’t write the cache + except Exception as ex: # noqa: BLE001 + print(f"Failed to fetch OpenRouter model list: {ex}") + try: + self.cache_file.write_text("{}") + except OSError: + pass diff --git a/aider/prompts.py b/aider/prompts.py index 84ed75e9b..912bc02c6 100644 --- a/aider/prompts.py +++ b/aider/prompts.py @@ -13,13 +13,12 @@ Generate a one-line commit message for those changes. The commit message should be structured as follows: : Use these for : fix, feat, build, chore, ci, docs, style, refactor, perf, test -Ensure the commit message: +Ensure the commit message:{language_instruction} - Starts with the appropriate prefix. - Is in the imperative mood (e.g., \"add feature\" not \"added feature\" or \"adding feature\"). - Does not exceed 72 characters. -Reply only with the one-line commit message, without any additional text, explanations, \ -or line breaks. +Reply only with the one-line commit message, without any additional text, explanations, or line breaks. """ # COMMANDS diff --git a/aider/queries/tree-sitter-language-pack/clojure-tags.scm b/aider/queries/tree-sitter-language-pack/clojure-tags.scm new file mode 100644 index 000000000..4b2bfa172 --- /dev/null +++ b/aider/queries/tree-sitter-language-pack/clojure-tags.scm @@ -0,0 +1,7 @@ +(list_lit + meta: _* + . (sym_lit name: (sym_name) @ignore) + . (sym_lit name: (sym_name) @name.definition.method) + (#match? @ignore "^def.*")) + +(sym_lit name: (sym_name) @name.reference.call) diff --git a/aider/queries/tree-sitter-language-pack/matlab-tags.scm b/aider/queries/tree-sitter-language-pack/matlab-tags.scm new file mode 100644 index 000000000..66f12527f --- /dev/null +++ b/aider/queries/tree-sitter-language-pack/matlab-tags.scm @@ -0,0 +1,10 @@ +(class_definition + name: (identifier) @name.definition.class) @definition.class + +(function_definition + name: (identifier) @name.definition.function) @definition.function + +(function_call + name: (identifier) @name.reference.call) @reference.call + +(command (command_name) @name.reference.call) @reference.call \ No newline at end of file diff --git a/aider/queries/tree-sitter-language-pack/ocaml-tags.scm b/aider/queries/tree-sitter-language-pack/ocaml-tags.scm new file mode 100644 index 000000000..52d5a857e --- /dev/null +++ b/aider/queries/tree-sitter-language-pack/ocaml-tags.scm @@ -0,0 +1,115 @@ +; Modules +;-------- + +( + (comment)? @doc . + (module_definition (module_binding (module_name) @name.definition.module) @definition.module) + (#strip! @doc "^\\(\\*\\*?\\s*|\\s\\*\\)$") +) + +(module_path (module_name) @name.reference.module) @reference.module + +; Module types +;-------------- + +( + (comment)? @doc . + (module_type_definition (module_type_name) @name.definition.interface) @definition.interface + (#strip! @doc "^\\(\\*\\*?\\s*|\\s\\*\\)$") +) + +(module_type_path (module_type_name) @name.reference.implementation) @reference.implementation + +; Functions +;---------- + +( + (comment)? @doc . + (value_definition + [ + (let_binding + pattern: (value_name) @name.definition.function + (parameter)) + (let_binding + pattern: (value_name) @name.definition.function + body: [(fun_expression) (function_expression)]) + ] @definition.function + ) + (#strip! @doc "^\\(\\*\\*?\\s*|\\s\\*\\)$") +) + +( + (comment)? @doc . + (external (value_name) @name.definition.function) @definition.function + (#strip! @doc "^\\(\\*\\*?\\s*|\\s\\*\\)$") +) + +(application_expression + function: (value_path (value_name) @name.reference.call)) @reference.call + +(infix_expression + left: (value_path (value_name) @name.reference.call) + operator: (concat_operator) @reference.call + (#eq? @reference.call "@@")) + +(infix_expression + operator: (rel_operator) @reference.call + right: (value_path (value_name) @name.reference.call) + (#eq? @reference.call "|>")) + +; Operator +;--------- + +( + (comment)? @doc . + (value_definition + (let_binding + pattern: (parenthesized_operator (_) @name.definition.function)) @definition.function) + (#strip! @doc "^\\(\\*\\*?\\s*|\\s\\*\\)$") +) + +[ + (prefix_operator) + (sign_operator) + (pow_operator) + (mult_operator) + (add_operator) + (concat_operator) + (rel_operator) + (and_operator) + (or_operator) + (assign_operator) + (hash_operator) + (indexing_operator) + (let_operator) + (let_and_operator) + (match_operator) +] @name.reference.call @reference.call + +; Classes +;-------- + +( + (comment)? @doc . + [ + (class_definition (class_binding (class_name) @name.definition.class) @definition.class) + (class_type_definition (class_type_binding (class_type_name) @name.definition.class) @definition.class) + ] + (#strip! @doc "^\\(\\*\\*?\\s*|\\s\\*\\)$") +) + +[ + (class_path (class_name) @name.reference.class) + (class_type_path (class_type_name) @name.reference.class) +] @reference.class + +; Methods +;-------- + +( + (comment)? @doc . + (method_definition (method_name) @name.definition.method) @definition.method + (#strip! @doc "^\\(\\*\\*?\\s*|\\s\\*\\)$") +) + +(method_invocation (method_name) @name.reference.call) @reference.call diff --git a/aider/queries/tree-sitter-language-pack/ocaml_interface-tags.scm b/aider/queries/tree-sitter-language-pack/ocaml_interface-tags.scm new file mode 100644 index 000000000..d7a8f8b97 --- /dev/null +++ b/aider/queries/tree-sitter-language-pack/ocaml_interface-tags.scm @@ -0,0 +1,98 @@ +; Modules +;-------- + +( + (comment)? @doc . + (module_definition + (module_binding (module_name) @name) @definition.module + ) + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +(module_path (module_name) @name) @reference.module +(extended_module_path (module_name) @name) @reference.module + +( + (comment)? @doc . + (module_type_definition (module_type_name) @name) @definition.interface + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +(module_type_path (module_type_name) @name) @reference.implementation + + +; Classes +;-------- + +( + (comment)? @doc . + [ + (class_definition + (class_binding (class_name) @name) @definition.class + ) + (class_type_definition + (class_type_binding (class_type_name) @name) @definition.class + ) + ] + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +[ + (class_path (class_name) @name) + (class_type_path (class_type_name) @name) +] @reference.class + +( + (comment)? @doc . + (method_definition (method_name) @name) @definition.method + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +(method_invocation (method_name) @name) @reference.call + + +; Types +;------ + +( + (comment)? @doc . + (type_definition + (type_binding + name: [ + (type_constructor) @name + (type_constructor_path (type_constructor) @name) + ] + ) @definition.type + ) + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +(type_constructor_path (type_constructor) @name) @reference.type + +[ + (constructor_declaration (constructor_name) @name) + (tag_specification (tag) @name) +] @definition.enum_variant + +[ + (constructor_path (constructor_name) @name) + (tag) @name +] @reference.enum_variant + +(field_declaration (field_name) @name) @definition.field + +(field_path (field_name) @name) @reference.field + +( + (comment)? @doc . + (external (value_name) @name) @definition.function + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +( + (comment)? @doc . + (value_specification + (value_name) @name.definition.function + ) @definition.function + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) diff --git a/aider/queries/tree-sitter-languages/README.md b/aider/queries/tree-sitter-languages/README.md index 12e1d5ee8..59e7219ca 100644 --- a/aider/queries/tree-sitter-languages/README.md +++ b/aider/queries/tree-sitter-languages/README.md @@ -21,3 +21,4 @@ tree-sitter language implementations: * [https://github.com/tree-sitter/tree-sitter-ruby](https://github.com/tree-sitter/tree-sitter-ruby) β€” licensed under the MIT License. * [https://github.com/tree-sitter/tree-sitter-rust](https://github.com/tree-sitter/tree-sitter-rust) β€” licensed under the MIT License. * [https://github.com/tree-sitter/tree-sitter-typescript](https://github.com/tree-sitter/tree-sitter-typescript) β€” licensed under the MIT License. +* [https://github.com/starelmanma/tree-sitter-fortran](https://github.com/starelmanma/tree-sitter-fortran) β€” licensed under the MIT License. diff --git a/aider/queries/tree-sitter-languages/fortran-tags.scm b/aider/queries/tree-sitter-languages/fortran-tags.scm new file mode 100644 index 000000000..c0bb260e8 --- /dev/null +++ b/aider/queries/tree-sitter-languages/fortran-tags.scm @@ -0,0 +1,15 @@ +;; derived from: https://github.com/stadelmanma/tree-sitter-fortran +;; License: MIT + +(module_statement + (name) @name.definition.class) @definition.class + +(function_statement + name: (name) @name.definition.function) @definition.function + +(subroutine_statement + name: (name) @name.definition.function) @definition.function + +(module_procedure_statement + name: (name) @name.definition.function) @definition.function + \ No newline at end of file diff --git a/aider/queries/tree-sitter-languages/haskell-tags.scm b/aider/queries/tree-sitter-languages/haskell-tags.scm new file mode 100644 index 000000000..f5c073750 --- /dev/null +++ b/aider/queries/tree-sitter-languages/haskell-tags.scm @@ -0,0 +1,3 @@ +(function (variable) @name.definition.function) +(bind (variable) @name.definition.function) +(signature (variable) @name.definition.type) diff --git a/aider/queries/tree-sitter-languages/julia-tags.scm b/aider/queries/tree-sitter-languages/julia-tags.scm new file mode 100644 index 000000000..b7d33d93b --- /dev/null +++ b/aider/queries/tree-sitter-languages/julia-tags.scm @@ -0,0 +1,60 @@ +;; derived from: https://github.com/tree-sitter/tree-sitter-julia +;; License: MIT + +(module + name: (identifier) @name.definition.module) @definition.module + +(module + name: (scoped_identifier) @name.definition.module) @definition.module + +(struct_definition + name: (type_identifier) @name.definition.class) @definition.class + +(mutable_struct_definition + name: (type_identifier) @name.definition.class) @definition.class + +(abstract_type_declaration + name: (type_identifier) @name.definition.class) @definition.class + +(constant_assignment + left: (identifier) @name.definition.class) @definition.class + +(function_definition + name: (identifier) @name.definition.function) @definition.function + +(function_definition + name: (scoped_identifier) @name.definition.function) @definition.function + +(assignment + left: (call_expression + function: (identifier) @name.definition.function)) @definition.function + +(method_definition + name: (identifier) @name.definition.method) @definition.method + +(macro_definition + name: (identifier) @name.definition.macro) @definition.macro + +(macro_call + name: (identifier) @name.reference.call) @reference.call + +(call_expression + function: (identifier) @name.reference.call) @reference.call + +(call_expression + function: (scoped_identifier) @name.reference.call) @reference.call + +(type_expression + name: (type_identifier) @name.reference.type) @reference.type + +(constant_assignment + left: (identifier) @name.definition.constant) @definition.constant + +(export_statement + (identifier) @name.reference.export) @reference.export + +(using_statement + (identifier) @name.reference.module) @reference.module + +(import_statement + (identifier) @name.reference.module) @reference.module diff --git a/aider/queries/tree-sitter-languages/matlab-tags.scm b/aider/queries/tree-sitter-languages/matlab-tags.scm new file mode 100644 index 000000000..66f12527f --- /dev/null +++ b/aider/queries/tree-sitter-languages/matlab-tags.scm @@ -0,0 +1,10 @@ +(class_definition + name: (identifier) @name.definition.class) @definition.class + +(function_definition + name: (identifier) @name.definition.function) @definition.function + +(function_call + name: (identifier) @name.reference.call) @reference.call + +(command (command_name) @name.reference.call) @reference.call \ No newline at end of file diff --git a/aider/queries/tree-sitter-languages/ocaml_interface-tags.scm b/aider/queries/tree-sitter-languages/ocaml_interface-tags.scm new file mode 100644 index 000000000..d7a8f8b97 --- /dev/null +++ b/aider/queries/tree-sitter-languages/ocaml_interface-tags.scm @@ -0,0 +1,98 @@ +; Modules +;-------- + +( + (comment)? @doc . + (module_definition + (module_binding (module_name) @name) @definition.module + ) + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +(module_path (module_name) @name) @reference.module +(extended_module_path (module_name) @name) @reference.module + +( + (comment)? @doc . + (module_type_definition (module_type_name) @name) @definition.interface + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +(module_type_path (module_type_name) @name) @reference.implementation + + +; Classes +;-------- + +( + (comment)? @doc . + [ + (class_definition + (class_binding (class_name) @name) @definition.class + ) + (class_type_definition + (class_type_binding (class_type_name) @name) @definition.class + ) + ] + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +[ + (class_path (class_name) @name) + (class_type_path (class_type_name) @name) +] @reference.class + +( + (comment)? @doc . + (method_definition (method_name) @name) @definition.method + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +(method_invocation (method_name) @name) @reference.call + + +; Types +;------ + +( + (comment)? @doc . + (type_definition + (type_binding + name: [ + (type_constructor) @name + (type_constructor_path (type_constructor) @name) + ] + ) @definition.type + ) + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +(type_constructor_path (type_constructor) @name) @reference.type + +[ + (constructor_declaration (constructor_name) @name) + (tag_specification (tag) @name) +] @definition.enum_variant + +[ + (constructor_path (constructor_name) @name) + (tag) @name +] @reference.enum_variant + +(field_declaration (field_name) @name) @definition.field + +(field_path (field_name) @name) @reference.field + +( + (comment)? @doc . + (external (value_name) @name) @definition.function + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) + +( + (comment)? @doc . + (value_specification + (value_name) @name.definition.function + ) @definition.function + (#strip! @doc "^\\(\\*+\\s*|\\s*\\*+\\)$") +) diff --git a/aider/queries/tree-sitter-languages/zig-tags.scm b/aider/queries/tree-sitter-languages/zig-tags.scm new file mode 100644 index 000000000..c02028ea8 --- /dev/null +++ b/aider/queries/tree-sitter-languages/zig-tags.scm @@ -0,0 +1,3 @@ +(FnProto) @name.definition.function +(VarDecl "const" @name.definition.constant) +(VarDecl "var" @name.definition.variable) diff --git a/aider/repo.py b/aider/repo.py index 5ece5147c..e4597c8e4 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -1,3 +1,4 @@ +import contextlib import os import time from pathlib import Path, PurePosixPath @@ -20,6 +21,7 @@ import pathspec from aider import prompts, utils from .dump import dump # noqa: F401 +from .waiting import WaitingSpinner ANY_GIT_ERROR += [ OSError, @@ -34,6 +36,19 @@ ANY_GIT_ERROR += [ ANY_GIT_ERROR = tuple(ANY_GIT_ERROR) +@contextlib.contextmanager +def set_git_env(var_name, value, original_value): + """Temporarily set a Git environment variable.""" + os.environ[var_name] = value + try: + yield + finally: + if original_value is not None: + os.environ[var_name] = original_value + elif var_name in os.environ: + del os.environ[var_name] + + class GitRepo: repo = None aider_ignore_file = None @@ -58,6 +73,7 @@ class GitRepo: commit_prompt=None, subtree_only=False, git_commit_verify=True, + attribute_co_authored_by=False, # Added parameter ): self.io = io self.models = models @@ -69,6 +85,7 @@ class GitRepo: self.attribute_committer = attribute_committer self.attribute_commit_message_author = attribute_commit_message_author self.attribute_commit_message_committer = attribute_commit_message_committer + self.attribute_co_authored_by = attribute_co_authored_by # Assign from parameter self.commit_prompt = commit_prompt self.subtree_only = subtree_only self.git_commit_verify = git_commit_verify @@ -111,7 +128,76 @@ class GitRepo: if aider_ignore_file: self.aider_ignore_file = Path(aider_ignore_file) - def commit(self, fnames=None, context=None, message=None, aider_edits=False): + def commit(self, fnames=None, context=None, message=None, aider_edits=False, coder=None): + """ + Commit the specified files or all dirty files if none are specified. + + Args: + fnames (list, optional): List of filenames to commit. Defaults to None (commit all + dirty files). + context (str, optional): Context for generating commit message. Defaults to None. + message (str, optional): Explicit commit message. Defaults to None (generate message). + aider_edits (bool, optional): Whether the changes were made by Aider. Defaults to False. + This affects attribution logic. + coder (Coder, optional): The Coder instance, used for config and model info. + Defaults to None. + + Returns: + tuple(str, str) or None: The commit hash and commit message if successful, + else None. + + Attribution Logic: + ------------------ + This method handles Git commit attribution based on configuration flags and whether + Aider generated the changes (`aider_edits`). + + Key Concepts: + - Author: The person who originally wrote the code changes. + - Committer: The person who last applied the commit to the repository. + - aider_edits=True: Changes were generated by Aider (LLM). + - aider_edits=False: Commit is user-driven (e.g., /commit manually staged changes). + - Explicit Setting: A flag (--attribute-...) is set to True or False + via command line or config file. + - Implicit Default: A flag is not explicitly set, defaulting to None in args, which is + interpreted as True unless overridden by other logic. + + Flags: + - --attribute-author: Modify Author name to "User Name (aider)". + - --attribute-committer: Modify Committer name to "User Name (aider)". + - --attribute-co-authored-by: Add + "Co-authored-by: aider () " trailer to commit message. + + Behavior Summary: + + 1. When aider_edits = True (AI Changes): + - If --attribute-co-authored-by=True: + - Co-authored-by trailer IS ADDED. + - Author/Committer names are NOT modified by default (co-authored-by takes precedence). + - EXCEPTION: If --attribute-author/--attribute-committer is EXPLICITLY True, the + respective name IS modified (explicit overrides precedence). + - If --attribute-co-authored-by=False: + - Co-authored-by trailer is NOT added. + - Author/Committer names ARE modified by default (implicit True). + - EXCEPTION: If --attribute-author/--attribute-committer is EXPLICITLY False, + the respective name is NOT modified. + + 2. When aider_edits = False (User Changes): + - --attribute-co-authored-by is IGNORED (trailer never added). + - Author name is NEVER modified (--attribute-author ignored). + - Committer name IS modified by default (implicit True, as Aider runs `git commit`). + - EXCEPTION: If --attribute-committer is EXPLICITLY False, the name is NOT modified. + + Resulting Scenarios: + - Standard AI edit (defaults): Co-authored-by=False -> Author=You(aider), + Committer=You(aider) + - AI edit with Co-authored-by (default): Co-authored-by=True -> Author=You, + Committer=You, Trailer added + - AI edit with Co-authored-by + Explicit Author: Co-authored-by=True, + --attribute-author -> Author=You(aider), Committer=You, Trailer added + - User commit (defaults): aider_edits=False -> Author=You, Committer=You(aider) + - User commit with explicit no-committer: aider_edits=False, + --no-attribute-committer -> Author=You, Committer=You + """ if not fnames and not self.repo.is_dirty(): return @@ -122,19 +208,71 @@ class GitRepo: if message: commit_message = message else: - commit_message = self.get_commit_message(diffs, context) + user_language = None + if coder: + user_language = coder.commit_language + if not user_language: + user_language = coder.get_user_language() + commit_message = self.get_commit_message(diffs, context, user_language) - if aider_edits and self.attribute_commit_message_author: - commit_message = "aider: " + commit_message - elif self.attribute_commit_message_committer: - commit_message = "aider: " + commit_message + # Retrieve attribute settings, prioritizing coder.args if available + if coder and hasattr(coder, "args"): + attribute_author = coder.args.attribute_author + attribute_committer = coder.args.attribute_committer + attribute_commit_message_author = coder.args.attribute_commit_message_author + attribute_commit_message_committer = coder.args.attribute_commit_message_committer + attribute_co_authored_by = coder.args.attribute_co_authored_by + else: + # Fallback to self attributes (initialized from config/defaults) + attribute_author = self.attribute_author + attribute_committer = self.attribute_committer + attribute_commit_message_author = self.attribute_commit_message_author + attribute_commit_message_committer = self.attribute_commit_message_committer + attribute_co_authored_by = self.attribute_co_authored_by + + # Determine explicit settings (None means use default behavior) + author_explicit = attribute_author is not None + committer_explicit = attribute_committer is not None + + # Determine effective settings (apply default True if not explicit) + effective_author = True if attribute_author is None else attribute_author + effective_committer = True if attribute_committer is None else attribute_committer + + # Determine commit message prefixing + prefix_commit_message = aider_edits and ( + attribute_commit_message_author or attribute_commit_message_committer + ) + + # Determine Co-authored-by trailer + commit_message_trailer = "" + if aider_edits and attribute_co_authored_by: + model_name = "unknown-model" + if coder and hasattr(coder, "main_model") and coder.main_model.name: + model_name = coder.main_model.name + commit_message_trailer = f"\n\nCo-authored-by: aider ({model_name}) " + + # Determine if author/committer names should be modified + # Author modification applies only to aider edits. + # It's used if effective_author is True AND + # (co-authored-by is False OR author was explicitly set). + use_attribute_author = ( + aider_edits and effective_author and (not attribute_co_authored_by or author_explicit) + ) + + # Committer modification applies regardless of aider_edits (based on tests). + # It's used if effective_committer is True AND + # (it's not an aider edit with co-authored-by OR committer was explicitly set). + use_attribute_committer = effective_committer and ( + not (aider_edits and attribute_co_authored_by) or committer_explicit + ) if not commit_message: commit_message = "(no commit message provided)" - full_commit_message = commit_message - # if context: - # full_commit_message += "\n\n# Aider chat conversation:\n\n" + context + if prefix_commit_message: + commit_message = "aider: " + commit_message + + full_commit_message = commit_message + commit_message_trailer cmd = ["-m", full_commit_message] if not self.git_commit_verify: @@ -152,36 +290,32 @@ class GitRepo: original_user_name = self.repo.git.config("--get", "user.name") original_committer_name_env = os.environ.get("GIT_COMMITTER_NAME") + original_author_name_env = os.environ.get("GIT_AUTHOR_NAME") committer_name = f"{original_user_name} (aider)" - if self.attribute_committer: - os.environ["GIT_COMMITTER_NAME"] = committer_name - - if aider_edits and self.attribute_author: - original_author_name_env = os.environ.get("GIT_AUTHOR_NAME") - os.environ["GIT_AUTHOR_NAME"] = committer_name - try: - self.repo.git.commit(cmd) - commit_hash = self.get_head_commit_sha(short=True) - self.io.tool_output(f"Commit {commit_hash} {commit_message}", bold=True) - return commit_hash, commit_message + # Use context managers to handle environment variables + with contextlib.ExitStack() as stack: + if use_attribute_committer: + stack.enter_context( + set_git_env( + "GIT_COMMITTER_NAME", committer_name, original_committer_name_env + ) + ) + if use_attribute_author: + stack.enter_context( + set_git_env("GIT_AUTHOR_NAME", committer_name, original_author_name_env) + ) + + # Perform the commit + self.repo.git.commit(cmd) + commit_hash = self.get_head_commit_sha(short=True) + self.io.tool_output(f"Commit {commit_hash} {commit_message}", bold=True) + return commit_hash, commit_message + except ANY_GIT_ERROR as err: self.io.tool_error(f"Unable to commit: {err}") - finally: - # Restore the env - - if self.attribute_committer: - if original_committer_name_env is not None: - os.environ["GIT_COMMITTER_NAME"] = original_committer_name_env - else: - del os.environ["GIT_COMMITTER_NAME"] - - if aider_edits and self.attribute_author: - if original_author_name_env is not None: - os.environ["GIT_AUTHOR_NAME"] = original_author_name_env - else: - del os.environ["GIT_AUTHOR_NAME"] + # No return here, implicitly returns None def get_rel_repo_dir(self): try: @@ -189,7 +323,7 @@ class GitRepo: except (ValueError, OSError): return self.repo.git_dir - def get_commit_message(self, diffs, context): + def get_commit_message(self, diffs, context, user_language=None): diffs = "# Diffs:\n" + diffs content = "" @@ -198,20 +332,35 @@ class GitRepo: content += diffs system_content = self.commit_prompt or prompts.commit_system - messages = [ - dict(role="system", content=system_content), - dict(role="user", content=content), - ] + + language_instruction = "" + if user_language: + language_instruction = f"\n- Is written in {user_language}." + system_content = system_content.format(language_instruction=language_instruction) commit_message = None for model in self.models: - num_tokens = model.token_count(messages) - max_tokens = model.info.get("max_input_tokens") or 0 - if max_tokens and num_tokens > max_tokens: - continue - commit_message = model.simple_send_with_retries(messages) - if commit_message: - break + spinner_text = f"Generating commit message with {model.name}" + with WaitingSpinner(spinner_text): + if model.system_prompt_prefix: + current_system_content = model.system_prompt_prefix + "\n" + system_content + else: + current_system_content = system_content + + messages = [ + dict(role="system", content=current_system_content), + dict(role="user", content=content), + ] + + num_tokens = model.token_count(messages) + max_tokens = model.info.get("max_input_tokens") or 0 + + if max_tokens and num_tokens > max_tokens: + continue + + commit_message = model.simple_send_with_retries(messages) + if commit_message: + break # Found a model that could generate the message if not commit_message: self.io.tool_error("Failed to generate commit message!") @@ -248,14 +397,20 @@ class GitRepo: try: if current_branch_has_commits: args = ["HEAD", "--"] + list(fnames) - diffs += self.repo.git.diff(*args) + diffs += self.repo.git.diff(*args, stdout_as_string=False).decode( + self.io.encoding, "replace" + ) return diffs wd_args = ["--"] + list(fnames) index_args = ["--cached"] + wd_args - diffs += self.repo.git.diff(*index_args) - diffs += self.repo.git.diff(*wd_args) + diffs += self.repo.git.diff(*index_args, stdout_as_string=False).decode( + self.io.encoding, "replace" + ) + diffs += self.repo.git.diff(*wd_args, stdout_as_string=False).decode( + self.io.encoding, "replace" + ) return diffs except ANY_GIT_ERROR as err: @@ -269,7 +424,9 @@ class GitRepo: args += ["--color=never"] args += [from_commit, to_commit] - diffs = self.repo.git.diff(*args) + diffs = self.repo.git.diff(*args, stdout_as_string=False).decode( + self.io.encoding, "replace" + ) return diffs diff --git a/aider/repomap.py b/aider/repomap.py index 598770d18..23eee239f 100644 --- a/aider/repomap.py +++ b/aider/repomap.py @@ -19,7 +19,7 @@ from tqdm import tqdm from aider.dump import dump from aider.special import filter_important_files -from aider.utils import Spinner +from aider.waiting import Spinner # tree_sitter is throwing a FutureWarning warnings.simplefilter("ignore", category=FutureWarning) @@ -35,6 +35,8 @@ CACHE_VERSION = 3 if USING_TSL_PACK: CACHE_VERSION = 4 +UPDATING_REPO_MAP_MESSAGE = "Updating repo map" + class RepoMap: TAGS_CACHE_DIR = f".aider.tags.cache.v{CACHE_VERSION}" @@ -380,7 +382,7 @@ class RepoMap: if self.verbose: self.io.tool_output(f"Processing {fname}") if progress and not showing_bar: - progress() + progress(f"{UPDATING_REPO_MAP_MESSAGE}: {fname}") try: file_ok = Path(fname).is_file() @@ -459,17 +461,18 @@ class RepoMap: for ident in idents: if progress: - progress() + progress(f"{UPDATING_REPO_MAP_MESSAGE}: {ident}") definers = defines[ident] mul = 1.0 is_snake = ("_" in ident) and any(c.isalpha() for c in ident) + is_kebab = ("-" in ident) and any(c.isalpha() for c in ident) is_camel = any(c.isupper() for c in ident) and any(c.islower() for c in ident) if ident in mentioned_idents: mul *= 10 - if (is_snake or is_camel) and len(ident) >= 8: + if (is_snake or is_kebab or is_camel) and len(ident) >= 8: mul *= 10 if ident.startswith("_"): mul *= 0.1 @@ -512,7 +515,7 @@ class RepoMap: ranked_definitions = defaultdict(float) for src in G.nodes: if progress: - progress() + progress(f"{UPDATING_REPO_MAP_MESSAGE}: {src}") src_rank = ranked[src] total_weight = sum(data["weight"] for _src, _dst, data in G.out_edges(src, data=True)) @@ -621,7 +624,7 @@ class RepoMap: if not mentioned_idents: mentioned_idents = set() - spin = Spinner("Updating repo map") + spin = Spinner(UPDATING_REPO_MAP_MESSAGE) ranked_tags = self.get_ranked_tags( chat_fnames, @@ -655,7 +658,11 @@ class RepoMap: while lower_bound <= upper_bound: # dump(lower_bound, middle, upper_bound) - spin.step() + if middle > 1500: + show_tokens = f"{middle / 1000.0:.1f}K" + else: + show_tokens = str(middle) + spin.step(f"{UPDATING_REPO_MAP_MESSAGE}: {show_tokens} tokens") tree = self.to_tree(ranked_tags[:middle], chat_rel_fnames) num_tokens = self.token_count(tree) diff --git a/aider/resources/model-metadata.json b/aider/resources/model-metadata.json index 8cd469dce..64c480e55 100644 --- a/aider/resources/model-metadata.json +++ b/aider/resources/model-metadata.json @@ -1,32 +1,32 @@ { - "deepseek-reasoner": { - "max_tokens": 8192, - "max_input_tokens": 64000, - "max_output_tokens": 8192, - "input_cost_per_token": 0.00000055, - "input_cost_per_token_cache_hit": 0.00000014, - "cache_read_input_token_cost": 0.00000014, + "deepseek/deepseek-reasoner": { + "max_tokens": 64000, + "max_input_tokens": 128000, + "max_output_tokens": 64000, + "input_cost_per_token": 0.00000028, + "input_cost_per_token_cache_hit": 0.000000028, + "cache_read_input_token_cost": 0.000000028, "cache_creation_input_token_cost": 0.0, - "output_cost_per_token": 0.00000219, + "output_cost_per_token": 0.00000042, "litellm_provider": "deepseek", "mode": "chat", - //"supports_function_calling": true, + //"supports_function_calling": true, "supports_assistant_prefill": true, - //"supports_tool_choice": true, + "supports_tool_choice": false, "supports_prompt_caching": true }, - "openrouter/deepseek/deepseek-r1": { + "deepseek/deepseek-chat": { "max_tokens": 8192, - "max_input_tokens": 64000, + "max_input_tokens": 128000, "max_output_tokens": 8192, - "input_cost_per_token": 0.00000055, - "input_cost_per_token_cache_hit": 0.00000014, - "cache_read_input_token_cost": 0.00000014, + "input_cost_per_token": 0.00000028, + "input_cost_per_token_cache_hit": 0.000000028, + "cache_read_input_token_cost": 0.000000028, "cache_creation_input_token_cost": 0.0, - "output_cost_per_token": 0.00000219, - "litellm_provider": "openrouter", + "output_cost_per_token": 0.00000042, + "litellm_provider": "deepseek", "mode": "chat", - //"supports_function_calling": true, + //"supports_function_calling": true, "supports_assistant_prefill": true, //"supports_tool_choice": true, "supports_prompt_caching": true @@ -65,7 +65,7 @@ }, "openrouter/deepseek/deepseek-chat-v3-0324": { "max_tokens": 8192, - "max_input_tokens": 64000, + "max_input_tokens": 131072, "max_output_tokens": 8192, "input_cost_per_token": 0.00000055, "input_cost_per_token_cache_hit": 0.00000014, @@ -99,15 +99,6 @@ "output_cost_per_token": 0.000008, "mode": "chat", }, - "fireworks_ai/accounts/fireworks/models/deepseek-v3": { - "max_tokens": 128000, - "max_input_tokens": 100000, - "max_output_tokens": 8192, - "litellm_provider": "fireworks_ai", - "input_cost_per_token": 0.0000009, - "output_cost_per_token": 0.0000009, - "mode": "chat", - }, "fireworks_ai/accounts/fireworks/models/deepseek-v3-0324": { "max_tokens": 160000, "max_input_tokens": 100000, @@ -117,54 +108,6 @@ "output_cost_per_token": 0.0000009, "mode": "chat", }, - "o3-mini": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 0.0000011, - "output_cost_per_token": 0.0000044, - "cache_read_input_token_cost": 0.00000055, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_response_schema": true - }, - "openrouter/openai/o3-mini": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 0.0000011, - "output_cost_per_token": 0.0000044, - "cache_read_input_token_cost": 0.00000055, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_response_schema": true - }, - "openrouter/openai/o3-mini-high": { - "max_tokens": 100000, - "max_input_tokens": 200000, - "max_output_tokens": 100000, - "input_cost_per_token": 0.0000011, - "output_cost_per_token": 0.0000044, - "cache_read_input_token_cost": 0.00000055, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_response_schema": true - }, "openrouter/openrouter/quasar-alpha": { "max_input_tokens": 1000000, "max_output_tokens": 32000, @@ -203,26 +146,6 @@ "supports_prompt_caching": true, "supports_system_messages": true }, - "claude-3-7-sonnet-20250219": { - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 0.000003, - "output_cost_per_token": 0.000015, - "cache_creation_input_token_cost": 0.00000375, - "cache_read_input_token_cost": 0.0000003, - "litellm_provider": "anthropic", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "deprecation_date": "2025-10-01", - "supports_tool_choice": true - }, "anthropic/claude-3-7-sonnet-20250219": { "max_tokens": 8192, "max_input_tokens": 200000, @@ -243,43 +166,6 @@ "deprecation_date": "2025-10-01", "supports_tool_choice": true }, - "openrouter/anthropic/claude-3.7-sonnet": { - "max_tokens": 8192, - "max_input_tokens": 200000, - "max_output_tokens": 8192, - "input_cost_per_token": 0.000003, - "output_cost_per_token": 0.000015, - "cache_creation_input_token_cost": 0.00000375, - "cache_read_input_token_cost": 0.0000003, - "litellm_provider": "openrouter", - "mode": "chat", - "supports_function_calling": true, - "supports_vision": true, - "tool_use_system_prompt_tokens": 159, - "supports_assistant_prefill": true, - "supports_pdf_input": true, - "supports_prompt_caching": true, - "supports_response_schema": true, - "deprecation_date": "2025-10-01", - "supports_tool_choice": true - }, - "gpt-4.5-preview": { - "max_tokens": 16384, - "max_input_tokens": 128000, - "max_output_tokens": 16384, - "input_cost_per_token": 0.000075, - "output_cost_per_token": 0.00015, - "cache_read_input_token_cost": 0.0000375, - "litellm_provider": "openai", - "mode": "chat", - "supports_function_calling": true, - "supports_parallel_function_calling": true, - "supports_response_schema": true, - "supports_vision": true, - "supports_prompt_caching": true, - "supports_system_messages": true, - "supports_tool_choice": true - }, "openai/gpt-4.5-preview": { "max_tokens": 16384, "max_input_tokens": 128000, @@ -334,42 +220,6 @@ "supports_tool_choice": true, "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" }, - "gemini/gemini-2.5-pro-preview-03-25": { - "max_tokens": 8192, - "max_input_tokens": 1048576, - "max_output_tokens": 64000, - "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, - "input_cost_per_image": 0, - "input_cost_per_video_per_second": 0, - "input_cost_per_audio_per_second": 0, - "input_cost_per_token": 0.00000125, - "input_cost_per_character": 0, - "input_cost_per_token_above_128k_tokens": 0, - "input_cost_per_character_above_128k_tokens": 0, - "input_cost_per_image_above_128k_tokens": 0, - "input_cost_per_video_per_second_above_128k_tokens": 0, - "input_cost_per_audio_per_second_above_128k_tokens": 0, - "output_cost_per_token": 0.000010, - "output_cost_per_character": 0, - "output_cost_per_token_above_128k_tokens": 0, - "output_cost_per_character_above_128k_tokens": 0, - "litellm_provider": "gemini", - "mode": "chat", - "supports_system_messages": true, - "supports_function_calling": true, - "supports_vision": true, - "supports_audio_input": true, - "supports_video_input": true, - "supports_pdf_input": true, - "supports_response_schema": true, - "supports_tool_choice": true, - "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" - }, "vertex_ai/gemini-2.5-pro-exp-03-25": { "max_tokens": 8192, "max_input_tokens": 1048576, @@ -442,6 +292,61 @@ "supports_tool_choice": true, "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" }, + "vertex_ai/gemini-2.5-pro": { + "max_tokens": 65536, + "max_input_tokens": 1048576, + "max_output_tokens": 65536, + "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": 20, + "input_cost_per_token": 0.00000125, + "input_cost_per_token_above_200k_tokens": 0.0000025, + "output_cost_per_token": 0.00001, + "output_cost_per_token_above_200k_tokens": 0.000015, + "litellm_provider": "vertex_ai-language-models", + "mode": "chat", + "rpm": 2000, + "tpm": 8000000, + "supports_system_messages": true, + "supports_function_calling": true, + "supports_vision": true, + "supports_response_schema": true, + "supports_audio_output": false, + "supports_tool_choice": true, + "supported_modalities": ["text", "image", "audio", "video"], + "supported_output_modalities": ["text"], + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" + }, + "vertex_ai/gemini-2.5-flash": { + "max_tokens": 65536, + "max_input_tokens": 1048576, + "max_output_tokens": 65536, + "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": 20, + "input_cost_per_token": 0.0000003, + "input_cost_per_audio_token": 0.000001, + "output_cost_per_token": 0.0000025, + "litellm_provider": "vertex_ai-language-models", + "mode": "chat", + "rpm": 10000, + "tpm": 8000000, + "supports_system_messages": true, + "supports_function_calling": true, + "supports_vision": true, + "supports_response_schema": true, + "supports_audio_output": false, + "supports_tool_choice": true, + "supported_modalities": ["text", "image", "audio", "video"], + "supported_output_modalities": ["text"], + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" + }, "openrouter/google/gemini-2.5-pro-preview-03-25": { "max_tokens": 8192, "max_input_tokens": 1048576, @@ -478,7 +383,43 @@ "supports_tool_choice": true, "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" }, - "openrouter/google/gemini-2.5-pro-exp-03-25:free": { + "openrouter/google/gemini-2.5-pro-exp-03-25": { + "max_tokens": 8192, + "max_input_tokens": 1048576, + "max_output_tokens": 64000, + "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, + "input_cost_per_image": 0, + "input_cost_per_video_per_second": 0, + "input_cost_per_audio_per_second": 0, + "input_cost_per_token": 0, + "input_cost_per_character": 0, + "input_cost_per_token_above_128k_tokens": 0, + "input_cost_per_character_above_128k_tokens": 0, + "input_cost_per_image_above_128k_tokens": 0, + "input_cost_per_video_per_second_above_128k_tokens": 0, + "input_cost_per_audio_per_second_above_128k_tokens": 0, + "output_cost_per_token": 0, + "output_cost_per_character": 0, + "output_cost_per_token_above_128k_tokens": 0, + "output_cost_per_character_above_128k_tokens": 0, + "litellm_provider": "openrouter", + "mode": "chat", + "supports_system_messages": true, + "supports_function_calling": true, + "supports_vision": true, + "supports_audio_input": true, + "supports_video_input": true, + "supports_pdf_input": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "source": "https://cloud.google.com/vertex-ai/generative-ai/pricing" + }, + "openrouter/google/gemini-2.5": { "max_tokens": 8192, "max_input_tokens": 1048576, "max_output_tokens": 64000, @@ -523,15 +464,6 @@ "litellm_provider": "openrouter", "mode": "chat" }, - "xai/grok-3-beta": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 0.000003, - "output_cost_per_token": 0.000015, - "litellm_provider": "xai", - "mode": "chat" - }, "openrouter/x-ai/grok-3-mini-beta": { "max_tokens": 131072, "max_input_tokens": 131072, @@ -541,15 +473,6 @@ "litellm_provider": "openrouter", "mode": "chat" }, - "xai/grok-3-mini-beta": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 0.0000003, - "output_cost_per_token": 0.0000005, - "litellm_provider": "xai", - "mode": "chat" - }, "openrouter/x-ai/grok-3-fast-beta": { "max_tokens": 131072, "max_input_tokens": 131072, @@ -559,15 +482,6 @@ "litellm_provider": "openrouter", "mode": "chat" }, - "xai/grok-3-fast-beta": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 0.000005, - "output_cost_per_token": 0.000025, - "litellm_provider": "xai", - "mode": "chat" - }, "openrouter/x-ai/grok-3-mini-fast-beta": { "max_tokens": 131072, "max_input_tokens": 131072, @@ -577,15 +491,6 @@ "litellm_provider": "openrouter", "mode": "chat" }, - "xai/grok-3-mini-fast-beta": { - "max_tokens": 131072, - "max_input_tokens": 131072, - "max_output_tokens": 131072, - "input_cost_per_token": 0.0000006, - "output_cost_per_token": 0.000004, - "litellm_provider": "xai", - "mode": "chat" - }, "openrouter/google/gemini-2.0-flash-exp:free": { "max_tokens": 8192, "max_input_tokens": 1048576, @@ -605,4 +510,206 @@ "supports_audio_output": true, "supports_tool_choice": true }, + "gemini-2.5-pro-preview-05-06": { + "max_tokens": 65536, + "max_input_tokens": 1048576, + "max_output_tokens": 65536, + "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, + "input_cost_per_audio_token": 0.00000125, + "input_cost_per_token": 0.00000125, + "input_cost_per_token_above_200k_tokens": 0.0000025, + "output_cost_per_token": 0.00001, + "output_cost_per_token_above_200k_tokens": 0.000015, + "litellm_provider": "vertex_ai-language-models", + "mode": "chat", + "supports_reasoning": true, + "supports_system_messages": true, + "supports_function_calling": true, + "supports_vision": true, + "supports_response_schema": true, + "supports_audio_output": false, + "supports_tool_choice": true, + "supported_endpoints": ["/v1/chat/completions", "/v1/completions", "/v1/batch"], + "supported_modalities": ["text", "image", "audio", "video"], + "supported_output_modalities": ["text"], + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview" + }, + "gemini-2.5-pro-preview-06-05": { + "max_tokens": 65536, + "max_input_tokens": 1048576, + "max_output_tokens": 65536, + "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, + "input_cost_per_audio_token": 0.00000125, + "input_cost_per_token": 0.00000125, + "input_cost_per_token_above_200k_tokens": 0.0000025, + "output_cost_per_token": 0.00001, + "output_cost_per_token_above_200k_tokens": 0.000015, + "litellm_provider": "vertex_ai-language-models", + "mode": "chat", + "supports_reasoning": true, + "supports_system_messages": true, + "supports_function_calling": true, + "supports_vision": true, + "supports_response_schema": true, + "supports_audio_output": false, + "supports_tool_choice": true, + "supported_endpoints": ["/v1/chat/completions", "/v1/completions", "/v1/batch"], + "supported_modalities": ["text", "image", "audio", "video"], + "supported_output_modalities": ["text"], + "source": "https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview" + }, + "gemini/gemini-2.5-pro-preview-05-06": { + "max_tokens": 65536, + "max_input_tokens": 1048576, + "max_output_tokens": 65536, + "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, + "input_cost_per_audio_token": 0.0000007, + "input_cost_per_token": 0.00000125, + "input_cost_per_token_above_200k_tokens": 0.0000025, + "output_cost_per_token": 0.00001, + "output_cost_per_token_above_200k_tokens": 0.000015, + "litellm_provider": "gemini", + "mode": "chat", + "rpm": 10000, + "tpm": 10000000, + "supports_system_messages": true, + "supports_function_calling": true, + "supports_vision": true, + "supports_response_schema": true, + "supports_audio_output": false, + "supports_tool_choice": true, + "supported_modalities": ["text", "image", "audio", "video"], + "supported_output_modalities": ["text"], + "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview" + }, + "gemini/gemini-2.5-pro-preview-06-05": { + "max_tokens": 65536, + "max_input_tokens": 1048576, + "max_output_tokens": 65536, + "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, + "input_cost_per_audio_token": 0.0000007, + "input_cost_per_token": 0.00000125, + "input_cost_per_token_above_200k_tokens": 0.0000025, + "output_cost_per_token": 0.00001, + "output_cost_per_token_above_200k_tokens": 0.000015, + "litellm_provider": "gemini", + "mode": "chat", + "rpm": 10000, + "tpm": 10000000, + "supports_system_messages": true, + "supports_function_calling": true, + "supports_vision": true, + "supports_response_schema": true, + "supports_audio_output": false, + "supports_tool_choice": true, + "supported_modalities": ["text", "image", "audio", "video"], + "supported_output_modalities": ["text"], + "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro-preview" + }, + "gemini/gemini-2.5-pro": { + "max_tokens": 65536, + "max_input_tokens": 1048576, + "max_output_tokens": 65536, + "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": 20, + "input_cost_per_token": 0.00000125, + "input_cost_per_token_above_200k_tokens": 0.0000025, + "output_cost_per_token": 0.00001, + "output_cost_per_token_above_200k_tokens": 0.000015, + "litellm_provider": "gemini", + "mode": "chat", + "rpm": 2000, + "tpm": 8000000, + "supports_system_messages": true, + "supports_function_calling": true, + "supports_vision": true, + "supports_response_schema": true, + "supports_audio_output": false, + "supports_tool_choice": true, + "supported_modalities": ["text", "image", "audio", "video"], + "supported_output_modalities": ["text"], + "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro" + }, + "gemini/gemini-2.5-flash": { + "max_tokens": 65536, + "max_input_tokens": 1048576, + "max_output_tokens": 65536, + "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": 20, + "input_cost_per_token": 0.00000035, + "input_cost_per_audio_token": 0.000001, + "output_cost_per_token": 0.0000025, + "litellm_provider": "gemini", + "mode": "chat", + "rpm": 10000, + "tpm": 8000000, + "supports_system_messages": true, + "supports_function_calling": true, + "supports_vision": true, + "supports_response_schema": true, + "supports_audio_output": false, + "supports_tool_choice": true, + "supported_modalities": ["text", "image", "audio", "video"], + "supported_output_modalities": ["text"], + "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-flash" + }, + "gemini/gemini-2.5-flash-lite-preview-06-17": { + "max_tokens": 64000, + "max_input_tokens": 1000000, + "max_output_tokens": 64000, + "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": 20, + "input_cost_per_token": 0.00000001, + "input_cost_per_audio_token": 0.0000005, + "output_cost_per_token": 0.0000004, + "litellm_provider": "gemini", + "mode": "chat", + "rpm": 30000, + "tpm": 30000000, + "supports_system_messages": true, + "supports_function_calling": true, + "supports_vision": true, + "supports_response_schema": true, + "supports_audio_output": false, + "supports_tool_choice": true, + "supported_modalities": ["text", "image", "audio", "video"], + "supported_output_modalities": ["text"], + "source": "https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-flash-lite" + }, + "together_ai/Qwen/Qwen3-235B-A22B-fp8-tput": { + "input_cost_per_token": 0.0000002, + "output_cost_per_token": 0.0000006, + } } diff --git a/aider/resources/model-settings.yml b/aider/resources/model-settings.yml index 7b5970d6e..9052c668e 100644 --- a/aider/resources/model-settings.yml +++ b/aider/resources/model-settings.yml @@ -315,7 +315,7 @@ editor_edit_format: editor-diff accepts_settings: ["thinking_tokens"] -- name: vertex_ai-anthropic_models/vertex_ai/claude-3-7-sonnet@20250219 +- name: vertex_ai/claude-3-7-sonnet@20250219 overeager: true edit_format: diff weak_model_name: vertex_ai/claude-3-5-haiku@20241022 @@ -323,7 +323,7 @@ examples_as_sys_msg: true extra_params: max_tokens: 64000 - editor_model_name: vertex_ai-anthropic_models/vertex_ai/claude-3-7-sonnet@20250219 + editor_model_name: vertex_ai/claude-3-7-sonnet@20250219 editor_edit_format: editor-diff accepts_settings: ["thinking_tokens"] @@ -533,28 +533,10 @@ edit_format: diff-fenced use_repo_map: true -- name: gemini/gemini-1.5-pro-exp-0827 - edit_format: diff-fenced - use_repo_map: true - - name: gemini/gemini-exp-1206 edit_format: diff use_repo_map: true -- name: gemini/gemini-exp-1114 - edit_format: diff - use_repo_map: true - -- name: gemini/gemini-exp-1121 - edit_format: diff - use_repo_map: true - -- name: vertex_ai/gemini-pro-experimental - edit_format: diff-fenced - use_repo_map: true - -- name: gemini/gemini-1.5-flash-exp-0827 - - name: gemini/gemini-2.0-flash-exp edit_format: diff use_repo_map: true @@ -603,7 +585,7 @@ use_repo_map: true examples_as_sys_msg: true extra_params: - max_tokens: 8192 + max_tokens: 64000 caches_by_default: true use_temperature: false editor_model_name: deepseek/deepseek-chat @@ -674,7 +656,7 @@ reminder: sys examples_as_sys_msg: true extra_params: - max_tokens: 8192 + max_tokens: 65536 caches_by_default: true - name: openrouter/openai/gpt-4o @@ -818,6 +800,13 @@ editor_model_name: openrouter/deepseek/deepseek-chat editor_edit_format: editor-diff +- name: openrouter/moonshotai/kimi-k2 + edit_format: diff + use_repo_map: true + examples_as_sys_msg: true + extra_params: + temperature: 0.6 + - name: fireworks_ai/accounts/fireworks/models/deepseek-r1 edit_format: diff weak_model_name: fireworks_ai/accounts/fireworks/models/deepseek-v3 @@ -958,6 +947,7 @@ use_system_prompt: false - name: gemini/gemini-2.5-pro-preview-03-25 + overeager: true edit_format: diff-fenced use_repo_map: true weak_model_name: gemini/gemini-2.0-flash @@ -965,24 +955,28 @@ - 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 + overeager: true + weak_model_name: gemini/gemini-2.5-flash-preview-04-17 -- name: openrouter/google/gemini-2.5-pro-exp-03-25:free +- name: openrouter/google/gemini-2.5-pro-exp-03-25 edit_format: diff-fenced + overeager: true 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 + weak_model_name: vertex_ai/gemini-2.5-flash-preview-04-17 + overeager: true + editor_model_name: vertex_ai/gemini-2.5-flash-preview-04-17 - name: vertex_ai/gemini-2.5-pro-preview-03-25 edit_format: diff-fenced use_repo_map: true - # Need metadata for this one... - #weak_model_name: vertex_ai/gemini-2.0-flash + weak_model_name: vertex_ai/gemini-2.5-flash-preview-04-17 + overeager: true + editor_model_name: vertex_ai/gemini-2.5-flash-preview-04-17 - name: openrouter/openrouter/quasar-alpha use_repo_map: true @@ -1002,9 +996,6 @@ edit_format: whole accepts_settings: - reasoning_effort - #extra_params: - # extra_body: - # reasoning_effort: high - name: openai/o4-mini edit_format: diff @@ -1016,9 +1007,6 @@ system_prompt_prefix: "Formatting re-enabled. " accepts_settings: ["reasoning_effort"] examples_as_sys_msg: true - #extra_params: - # extra_body: - # reasoning_effort: high - name: openrouter/openai/o4-mini edit_format: diff @@ -1030,9 +1018,6 @@ system_prompt_prefix: "Formatting re-enabled. " accepts_settings: ["reasoning_effort"] examples_as_sys_msg: true - #extra_params: - # extra_body: - # reasoning_effort: high - name: azure/o4-mini edit_format: diff @@ -1044,18 +1029,24 @@ system_prompt_prefix: "Formatting re-enabled. " accepts_settings: ["reasoning_effort"] examples_as_sys_msg: true - #extra_params: - # extra_body: - # reasoning_effort: high + +- name: xai/grok-4 + use_repo_map: true + edit_format: diff + accepts_settings: + - reasoning_effort + +- name: openrouter/x-ai/grok-4 + use_repo_map: true + edit_format: diff + accepts_settings: + - reasoning_effort - name: xai/grok-3-mini-beta use_repo_map: true edit_format: whole accepts_settings: - reasoning_effort - #extra_params: - # extra_body: - # reasoning_effort: low - name: openrouter/x-ai/grok-3-fast-beta use_repo_map: true @@ -1148,9 +1139,17 @@ system_prompt_prefix: "Formatting re-enabled. " accepts_settings: ["reasoning_effort"] examples_as_sys_msg: true - #extra_params: - # extra_body: - # reasoning_effort: high + +- name: o3-pro + streaming: false + edit_format: diff + weak_model_name: gpt-4.1-mini + use_repo_map: true + editor_model_name: gpt-4.1 + editor_edit_format: editor-diff + system_prompt_prefix: "Formatting re-enabled. " + accepts_settings: ["reasoning_effort"] + examples_as_sys_msg: true - name: openai/o4-mini edit_format: diff @@ -1162,9 +1161,6 @@ system_prompt_prefix: "Formatting re-enabled. " accepts_settings: ["reasoning_effort"] examples_as_sys_msg: true - #extra_params: - # extra_body: - # reasoning_effort: high - name: openrouter/openai/o4-mini edit_format: diff @@ -1176,9 +1172,6 @@ system_prompt_prefix: "Formatting re-enabled. " accepts_settings: ["reasoning_effort"] examples_as_sys_msg: true - #extra_params: - # extra_body: - # reasoning_effort: high - name: azure/o4-mini edit_format: diff @@ -1190,9 +1183,6 @@ system_prompt_prefix: "Formatting re-enabled. " accepts_settings: ["reasoning_effort"] examples_as_sys_msg: true - #extra_params: - # extra_body: - # reasoning_effort: high - name: openai/o3 streaming: false @@ -1204,9 +1194,17 @@ system_prompt_prefix: "Formatting re-enabled. " accepts_settings: ["reasoning_effort"] examples_as_sys_msg: true - #extra_params: - # extra_body: - # reasoning_effort: high + +- name: openai/o3-pro + streaming: false + edit_format: diff + weak_model_name: openai/gpt-4.1-mini + use_repo_map: true + editor_model_name: openai/gpt-4.1 + editor_edit_format: editor-diff + system_prompt_prefix: "Formatting re-enabled. " + accepts_settings: ["reasoning_effort"] + examples_as_sys_msg: true - name: openai/o4-mini edit_format: diff @@ -1218,9 +1216,6 @@ system_prompt_prefix: "Formatting re-enabled. " accepts_settings: ["reasoning_effort"] examples_as_sys_msg: true - #extra_params: - # extra_body: - # reasoning_effort: high - name: openrouter/openai/o4-mini edit_format: diff @@ -1232,9 +1227,6 @@ system_prompt_prefix: "Formatting re-enabled. " accepts_settings: ["reasoning_effort"] examples_as_sys_msg: true - #extra_params: - # extra_body: - # reasoning_effort: high - name: azure/o4-mini edit_format: diff @@ -1246,9 +1238,6 @@ system_prompt_prefix: "Formatting re-enabled. " accepts_settings: ["reasoning_effort"] examples_as_sys_msg: true - #extra_params: - # extra_body: - # reasoning_effort: high - name: openrouter/openai/o3 streaming: false @@ -1260,9 +1249,17 @@ system_prompt_prefix: "Formatting re-enabled. " accepts_settings: ["reasoning_effort"] examples_as_sys_msg: true - #extra_params: - # extra_body: - # reasoning_effort: high + +- name: openrouter/openai/o3-pro + streaming: false + edit_format: diff + weak_model_name: openrouter/openai/gpt-4.1-mini + use_repo_map: true + editor_model_name: openrouter/openai/gpt-4.1 + editor_edit_format: editor-diff + system_prompt_prefix: "Formatting re-enabled. " + accepts_settings: ["reasoning_effort"] + examples_as_sys_msg: true - name: openai/o4-mini edit_format: diff @@ -1274,9 +1271,6 @@ system_prompt_prefix: "Formatting re-enabled. " accepts_settings: ["reasoning_effort"] examples_as_sys_msg: true - #extra_params: - # extra_body: - # reasoning_effort: high - name: openrouter/openai/o4-mini edit_format: diff @@ -1288,9 +1282,6 @@ system_prompt_prefix: "Formatting re-enabled. " accepts_settings: ["reasoning_effort"] examples_as_sys_msg: true - #extra_params: - # extra_body: - # reasoning_effort: high - name: azure/o4-mini edit_format: diff @@ -1302,9 +1293,6 @@ system_prompt_prefix: "Formatting re-enabled. " accepts_settings: ["reasoning_effort"] examples_as_sys_msg: true - #extra_params: - # extra_body: - # reasoning_effort: high - name: azure/o3 streaming: false @@ -1316,9 +1304,17 @@ system_prompt_prefix: "Formatting re-enabled. " accepts_settings: ["reasoning_effort"] examples_as_sys_msg: true - #extra_params: - # extra_body: - # reasoning_effort: high + +- name: azure/o3-pro + streaming: false + edit_format: diff + weak_model_name: azure/gpt-4.1-mini + use_repo_map: true + editor_model_name: azure/gpt-4.1 + editor_edit_format: editor-diff + system_prompt_prefix: "Formatting re-enabled. " + accepts_settings: ["reasoning_effort"] + examples_as_sys_msg: true - name: openai/o4-mini edit_format: diff @@ -1363,7 +1359,1040 @@ system_prompt_prefix: "Formatting re-enabled. " accepts_settings: ["reasoning_effort"] examples_as_sys_msg: true - #extra_params: - # extra_body: - # reasoning_effort: high +- name: gemini/gemini-2.5-flash-preview-04-17 + edit_format: diff + use_repo_map: true + accepts_settings: ["reasoning_effort", "thinking_tokens"] + +- name: gemini-2.5-flash-preview-04-17 + edit_format: diff + use_repo_map: true + accepts_settings: ["reasoning_effort", "thinking_tokens"] + +- name: vertex_ai/gemini-2.5-flash-preview-04-17 + edit_format: diff + use_repo_map: true + accepts_settings: ["reasoning_effort", "thinking_tokens"] + +- name: openrouter/google/gemini-2.5-pro-preview-03-25 + overeager: true + edit_format: diff-fenced + use_repo_map: true + weak_model_name: openrouter/google/gemini-2.0-flash-001 + +- name: gemini/gemini-2.5-pro-preview-05-06 + overeager: true + edit_format: diff-fenced + use_repo_map: true + weak_model_name: gemini/gemini-2.5-flash-preview-04-17 + +- name: gemini/gemini-2.5-pro-preview-06-05 + overeager: true + edit_format: diff-fenced + use_repo_map: true + weak_model_name: gemini/gemini-2.5-flash-preview-04-17 + accepts_settings: ["thinking_tokens"] + +- name: gemini/gemini-2.5-flash + overeager: true + edit_format: diff-fenced + use_repo_map: true + use_temperature: false + accepts_settings: ["thinking_tokens"] + +- name: gemini/gemini-2.5-pro + overeager: true + edit_format: diff-fenced + use_repo_map: true + weak_model_name: gemini/gemini-2.5-flash + use_temperature: false + accepts_settings: ["thinking_tokens"] + +- name: gemini/gemini-2.5-flash-lite-preview-06-17 + overeager: true + edit_format: diff-fenced + use_repo_map: true + use_temperature: false + accepts_settings: ["thinking_tokens"] + +- name: vertex_ai/gemini-2.5-pro-preview-05-06 + edit_format: diff-fenced + use_repo_map: true + weak_model_name: vertex_ai/gemini-2.5-flash-preview-04-17 + overeager: true + editor_model_name: vertex_ai/gemini-2.5-flash-preview-04-17 + +- name: vertex_ai/gemini-2.5-pro-preview-06-05 + edit_format: diff-fenced + use_repo_map: true + weak_model_name: vertex_ai/gemini-2.5-flash-preview-04-17 + overeager: true + editor_model_name: vertex_ai/gemini-2.5-flash-preview-04-17 + accepts_settings: ["thinking_tokens"] + +- name: vertex_ai/gemini-2.5-pro + edit_format: diff-fenced + use_repo_map: true + weak_model_name: vertex_ai/gemini-2.5-flash + overeager: true + editor_model_name: vertex_ai/gemini-2.5-flash + accepts_settings: ["thinking_tokens"] + +- name: vertex_ai/gemini-2.5-flash + overeager: true + edit_format: diff-fenced + use_repo_map: true + accepts_settings: ["thinking_tokens"] + +- name: openrouter/google/gemini-2.5-pro-preview-05-06 + overeager: true + edit_format: diff-fenced + use_repo_map: true + weak_model_name: openrouter/google/gemini-2.0-flash-001 + +- name: openrouter/google/gemini-2.5-pro-preview-06-05 + overeager: true + edit_format: diff-fenced + use_repo_map: true + weak_model_name: openrouter/google/gemini-2.0-flash-001 + accepts_settings: ["thinking_tokens"] + +- name: openrouter/google/gemini-2.5-pro + overeager: true + edit_format: diff-fenced + use_repo_map: true + weak_model_name: openrouter/google/gemini-2.5-flash + accepts_settings: ["thinking_tokens"] + +- name: gemini/gemini-3-pro-preview + overeager: true + edit_format: diff-fenced + use_repo_map: true + weak_model_name: gemini/gemini-2.5-flash + use_temperature: false + accepts_settings: ["thinking_tokens"] + +- name: vertex_ai/gemini-3-pro-preview + edit_format: diff-fenced + use_repo_map: true + weak_model_name: vertex_ai/gemini-2.5-flash + overeager: true + editor_model_name: vertex_ai/gemini-2.5-flash + accepts_settings: ["thinking_tokens"] + +- name: openrouter/google/gemini-3-pro-preview + overeager: true + edit_format: diff-fenced + use_repo_map: true + weak_model_name: openrouter/google/gemini-2.5-flash + accepts_settings: ["thinking_tokens"] + +- name: gemini/gemini-3-flash-preview + overeager: true + edit_format: diff-fenced + use_repo_map: true + use_temperature: false + accepts_settings: ["thinking_tokens"] + +- name: vertex_ai/gemini-3-flash-preview + overeager: true + edit_format: diff-fenced + use_repo_map: true + accepts_settings: ["thinking_tokens"] + +- name: openrouter/google/gemini-3-flash-preview + overeager: true + edit_format: diff-fenced + use_repo_map: true + accepts_settings: ["thinking_tokens"] + +#- name: openrouter/qwen/qwen3-235b-a22b +# system_prompt_prefix: "/no_think" +# use_temperature: 0.7 +# extra_params: +# max_tokens: 24000 +# top_p: 0.8 +# top_k: 20 +# min_p: 0.0 +# temperature: 0.7 +# extra_body: +# provider: +# order: ["Together"] + +#- name: together_ai/Qwen/Qwen3-235B-A22B-fp8-tput +# system_prompt_prefix: "/no_think" +# use_temperature: 0.7 +# reasoning_tag: think +# extra_params: +# max_tokens: 24000 +# top_p: 0.8 +# top_k: 20 +# min_p: 0.0 +# temperature: 0.7 + + +- name: claude-sonnet-4-20250514 + edit_format: diff + weak_model_name: claude-3-5-haiku-20241022 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: claude-sonnet-4-20250514 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: anthropic/claude-sonnet-4-20250514 + edit_format: diff + weak_model_name: anthropic/claude-3-5-haiku-20241022 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: anthropic/claude-sonnet-4-20250514 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: bedrock/anthropic.claude-sonnet-4-20250514-v1:0 + edit_format: diff + weak_model_name: bedrock/anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: bedrock/anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: bedrock/us.anthropic.claude-sonnet-4-20250514-v1:0 + edit_format: diff + weak_model_name: bedrock/us.anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: bedrock/us.anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0 + edit_format: diff + weak_model_name: bedrock/anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: bedrock_converse/anthropic.claude-sonnet-4-20250514-v1:0 + edit_format: diff + weak_model_name: bedrock_converse/anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: bedrock_converse/anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: bedrock_converse/us.anthropic.claude-sonnet-4-20250514-v1:0 + edit_format: diff + weak_model_name: bedrock_converse/us.anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: bedrock_converse/us.anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: vertex_ai/claude-sonnet-4@20250514 + edit_format: diff + weak_model_name: vertex_ai/claude-3-5-haiku@20241022 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + max_tokens: 64000 + editor_model_name: vertex_ai/claude-sonnet-4@20250514 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: vertex_ai/claude-sonnet-4@20250514 + edit_format: diff + weak_model_name: vertex_ai/claude-3-5-haiku@20241022 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + max_tokens: 64000 + editor_model_name: vertex_ai/claude-sonnet-4@20250514 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: openrouter/anthropic/claude-sonnet-4 + edit_format: diff + weak_model_name: openrouter/anthropic/claude-3-5-haiku + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: openrouter/anthropic/claude-sonnet-4 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: anthropic.claude-sonnet-4-20250514-v1:0 + edit_format: diff + weak_model_name: anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: bedrock_converse/eu.anthropic.claude-sonnet-4-20250514-v1:0 + edit_format: diff + weak_model_name: bedrock_converse/eu.anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: bedrock_converse/eu.anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: eu.anthropic.claude-sonnet-4-20250514-v1:0 + edit_format: diff + weak_model_name: eu.anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: eu.anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: us.anthropic.claude-sonnet-4-20250514-v1:0 + edit_format: diff + weak_model_name: us.anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: us.anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: claude-opus-4-20250514 + edit_format: diff + weak_model_name: claude-3-5-haiku-20241022 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 32000 + cache_control: true + editor_model_name: claude-sonnet-4-20250514 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: anthropic/claude-opus-4-20250514 + edit_format: diff + weak_model_name: anthropic/claude-3-5-haiku-20241022 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 32000 + cache_control: true + editor_model_name: anthropic/claude-sonnet-4-20250514 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: anthropic.claude-opus-4-20250514-v1:0 + edit_format: diff + weak_model_name: anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 32000 + cache_control: true + editor_model_name: anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: bedrock_converse/anthropic.claude-opus-4-20250514-v1:0 + edit_format: diff + weak_model_name: bedrock_converse/anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 32000 + cache_control: true + editor_model_name: bedrock_converse/anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: bedrock_converse/us.anthropic.claude-opus-4-20250514-v1:0 + edit_format: diff + weak_model_name: bedrock_converse/us.anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 32000 + cache_control: true + editor_model_name: bedrock_converse/us.anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: bedrock_converse/eu.anthropic.claude-opus-4-20250514-v1:0 + edit_format: diff + weak_model_name: bedrock_converse/eu.anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 32000 + cache_control: true + editor_model_name: bedrock_converse/eu.anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: eu.anthropic.claude-opus-4-20250514-v1:0 + edit_format: diff + weak_model_name: eu.anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 32000 + cache_control: true + editor_model_name: eu.anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: us.anthropic.claude-opus-4-20250514-v1:0 + edit_format: diff + weak_model_name: us.anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 32000 + cache_control: true + editor_model_name: us.anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: vertex_ai/claude-opus-4@20250514 + edit_format: diff + weak_model_name: vertex_ai/claude-3-5-haiku@20241022 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + max_tokens: 32000 + editor_model_name: vertex_ai/claude-sonnet-4@20250514 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: vertex_ai/claude-opus-4@20250514 + edit_format: diff + weak_model_name: vertex_ai/claude-3-5-haiku@20241022 + use_repo_map: true + examples_as_sys_msg: false + extra_params: + max_tokens: 32000 + editor_model_name: vertex_ai/claude-sonnet-4@20250514 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +- name: vertex_ai/gemini-2.5-flash-preview-05-20 + edit_format: diff + use_repo_map: true + accepts_settings: ["reasoning_effort", "thinking_tokens"] + +- name: openrouter/anthropic/claude-opus-4 + edit_format: diff + weak_model_name: openrouter/anthropic/claude-3-5-haiku + use_repo_map: true + examples_as_sys_msg: false + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 32000 + cache_control: true + editor_model_name: openrouter/anthropic/claude-sonnet-4 + editor_edit_format: editor-diff + accepts_settings: ["thinking_tokens"] + +# GPT-5 family +- name: gpt-5 + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + overeager: true + +- name: gpt-5-pro + streaming: false + edit_format: diff + weak_model_name: gpt-5-mini + use_repo_map: true + editor_model_name: gpt-5 + editor_edit_format: editor-diff + system_prompt_prefix: "Formatting re-enabled. " + accepts_settings: ["reasoning_effort"] + examples_as_sys_msg: true + use_temperature: false + +- name: gpt-5-2025-08-07 + edit_format: diff + weak_model_name: gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: gpt-5.1 + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + overeager: true + +- name: gpt-5.1-2025-11-13 + edit_format: diff + weak_model_name: gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: gpt-5.2-pro + streaming: false + edit_format: diff + weak_model_name: gpt-5-mini + use_repo_map: true + editor_model_name: gpt-5.2 + editor_edit_format: editor-diff + system_prompt_prefix: "Formatting re-enabled. " + accepts_settings: ["reasoning_effort"] + examples_as_sys_msg: true + use_temperature: false + +- name: gpt-5.2 + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + overeager: true + +- name: gpt-5.2-2025-12-11 + edit_format: diff + weak_model_name: gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: gpt-5-mini + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: gpt-5-mini-2025-08-07 + edit_format: diff + weak_model_name: gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: gpt-5-nano + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: gpt-5-nano-2025-08-07 + edit_format: diff + weak_model_name: gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: gpt-5-chat + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: gpt-5-chat-latest + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: gpt-5.1-chat + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: gpt-5.1-chat-latest + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: gpt-5.2-chat-latest + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: gpt-5-codex + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: gpt-5.1-codex + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: azure/gpt-5 + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: azure/gpt-5-pro + streaming: false + edit_format: diff + weak_model_name: azure/gpt-5-mini + use_repo_map: true + editor_model_name: azure/gpt-5 + editor_edit_format: editor-diff + system_prompt_prefix: "Formatting re-enabled. " + accepts_settings: ["reasoning_effort"] + examples_as_sys_msg: true + use_temperature: false + +- name: azure/gpt-5-2025-08-07 + edit_format: diff + weak_model_name: azure/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: azure/gpt-5.1 + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: azure/gpt-5.1-2025-11-13 + edit_format: diff + weak_model_name: azure/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: azure/gpt-5.2 + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: azure/gpt-5.2-2025-12-11 + edit_format: diff + weak_model_name: azure/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: azure/gpt-5-mini + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: azure/gpt-5-mini-2025-08-07 + edit_format: diff + weak_model_name: azure/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: azure/gpt-5-nano + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: azure/gpt-5-nano-2025-08-07 + edit_format: diff + weak_model_name: azure/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: azure/gpt-5-chat + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: azure/gpt-5-chat-latest + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: azure/gpt-5.1-chat + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: azure/gpt-5.1-chat-latest + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: azure/gpt-5.2-chat-latest + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openai/gpt-5 + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openai/gpt-5-pro + streaming: false + edit_format: diff + weak_model_name: openai/gpt-5-mini + use_repo_map: true + editor_model_name: openai/gpt-5 + editor_edit_format: editor-diff + system_prompt_prefix: "Formatting re-enabled. " + accepts_settings: ["reasoning_effort"] + examples_as_sys_msg: true + use_temperature: false + +- name: openai/gpt-5-2025-08-07 + edit_format: diff + weak_model_name: openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openai/gpt-5.1 + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openai/gpt-5.1-2025-11-13 + edit_format: diff + weak_model_name: openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openai/gpt-5.2-pro + streaming: false + edit_format: diff + weak_model_name: openai/gpt-5-mini + use_repo_map: true + editor_model_name: openai/gpt-5.2 + editor_edit_format: editor-diff + system_prompt_prefix: "Formatting re-enabled. " + accepts_settings: ["reasoning_effort"] + examples_as_sys_msg: true + use_temperature: false + +- name: openai/gpt-5.2 + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openai/gpt-5.2-2025-12-11 + edit_format: diff + weak_model_name: openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openai/gpt-5-mini + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openai/gpt-5-mini-2025-08-07 + edit_format: diff + weak_model_name: openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openai/gpt-5-nano + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openai/gpt-5-nano-2025-08-07 + edit_format: diff + weak_model_name: openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openai/gpt-5-chat + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openai/gpt-5-chat-latest + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openai/gpt-5.1-chat + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openai/gpt-5.1-chat-latest + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openai/gpt-5.2-chat-latest + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openrouter/openai/gpt-5 + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openrouter/openai/gpt-5-pro + streaming: false + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-mini + use_repo_map: true + editor_model_name: openrouter/openai/gpt-5 + editor_edit_format: editor-diff + system_prompt_prefix: "Formatting re-enabled. " + accepts_settings: ["reasoning_effort"] + examples_as_sys_msg: true + use_temperature: false + +- name: openrouter/openai/gpt-5-2025-08-07 + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openrouter/openai/gpt-5.1 + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openrouter/openai/gpt-5.1-2025-11-13 + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openrouter/openai/gpt-5.2-pro + streaming: false + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-mini + use_repo_map: true + editor_model_name: openrouter/openai/gpt-5.2 + editor_edit_format: editor-diff + system_prompt_prefix: "Formatting re-enabled. " + accepts_settings: ["reasoning_effort"] + examples_as_sys_msg: true + use_temperature: false + +- name: openrouter/openai/gpt-5.2 + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openrouter/openai/gpt-5.2-2025-12-11 + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openrouter/openai/gpt-5-mini + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openrouter/openai/gpt-5-mini-2025-08-07 + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openrouter/openai/gpt-5-nano + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openrouter/openai/gpt-5-nano-2025-08-07 + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openrouter/openai/gpt-5-chat + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openrouter/openai/gpt-5-chat-latest + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openrouter/openai/gpt-5.1-chat + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openrouter/openai/gpt-5.1-chat-latest + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] + +- name: openrouter/openai/gpt-5.2-chat-latest + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: ["reasoning_effort"] diff --git a/aider/scrape.py b/aider/scrape.py index 8ab5a93ed..3d5cfa86f 100755 --- a/aider/scrape.py +++ b/aider/scrape.py @@ -14,7 +14,7 @@ aider_user_agent = f"Aider/{__version__} +{urls.website}" # platforms. -def install_playwright(io): +def check_env(): try: from playwright.sync_api import sync_playwright @@ -29,6 +29,16 @@ def install_playwright(io): except Exception: has_chromium = False + return has_pip, has_chromium + + +def has_playwright(): + has_pip, has_chromium = check_env() + return has_pip and has_chromium + + +def install_playwright(io): + has_pip, has_chromium = check_env() if has_pip and has_chromium: return True @@ -262,7 +272,7 @@ def slimdown_html(soup): def main(url): - scraper = Scraper() + scraper = Scraper(playwright_available=has_playwright()) content = scraper.scrape(url) print(content) diff --git a/aider/utils.py b/aider/utils.py index c6773f140..834ffa195 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -1,14 +1,14 @@ -import itertools import os import platform -import shlex import subprocess import sys import tempfile -import time from pathlib import Path +import oslex + from aider.dump import dump # noqa: F401 +from aider.waiting import Spinner IMAGE_EXTENSIONS = {".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff", ".webp", ".pdf"} @@ -211,6 +211,13 @@ def run_install(cmd): print() print("Installing:", printable_shell_command(cmd)) + # First ensure pip is available + ensurepip_cmd = [sys.executable, "-m", "ensurepip", "--upgrade"] + try: + subprocess.run(ensurepip_cmd, capture_output=True, check=False) + except Exception: + pass # Continue even if ensurepip fails + try: output = [] process = subprocess.Popen( @@ -250,55 +257,6 @@ def run_install(cmd): return False, output -class Spinner: - unicode_spinner = ["β ‹", "β ™", "β Ή", "β Έ", "β Ό", "β ΄", "β ¦", "β §", "β ‡", "⠏"] - ascii_spinner = ["|", "/", "-", "\\"] - - def __init__(self, text): - self.text = text - self.start_time = time.time() - self.last_update = 0 - self.visible = False - self.is_tty = sys.stdout.isatty() - self.tested = False - - def test_charset(self): - if self.tested: - return - self.tested = True - # Try unicode first, fall back to ascii if needed - try: - # Test if we can print unicode characters - print(self.unicode_spinner[0], end="", flush=True) - print("\r", end="", flush=True) - self.spinner_chars = itertools.cycle(self.unicode_spinner) - except UnicodeEncodeError: - self.spinner_chars = itertools.cycle(self.ascii_spinner) - - def step(self): - if not self.is_tty: - return - - current_time = time.time() - if not self.visible and current_time - self.start_time >= 0.5: - self.visible = True - self._step() - elif self.visible and current_time - self.last_update >= 0.1: - self._step() - self.last_update = current_time - - def _step(self): - if not self.visible: - return - - self.test_charset() - print(f"\r{self.text} {next(self.spinner_chars)}\r{self.text} ", end="", flush=True) - - def end(self): - if self.visible and self.is_tty: - print("\r" + " " * (len(self.text) + 3)) - - def find_common_root(abs_fnames): try: if len(abs_fnames) == 1: @@ -384,19 +342,4 @@ def printable_shell_command(cmd_list): Returns: str: Shell-escaped command string. """ - if platform.system() == "Windows": - return subprocess.list2cmdline(cmd_list) - else: - return shlex.join(cmd_list) - - -def main(): - spinner = Spinner("Running spinner...") - for _ in range(40): # 40 steps * 0.25 seconds = 10 seconds - time.sleep(0.25) - spinner.step() - spinner.end() - - -if __name__ == "__main__": - main() + return oslex.join(cmd_list) diff --git a/aider/waiting.py b/aider/waiting.py new file mode 100644 index 000000000..9c2f72bc7 --- /dev/null +++ b/aider/waiting.py @@ -0,0 +1,221 @@ +#!/usr/bin/env python + +""" +Thread-based, killable spinner utility. + +Use it like: + + from aider.waiting import WaitingSpinner + + spinner = WaitingSpinner("Waiting for LLM") + spinner.start() + ... # long task + spinner.stop() +""" + +import sys +import threading +import time + +from rich.console import Console + + +class Spinner: + """ + Minimal spinner that scans a single marker back and forth across a line. + + The animation is pre-rendered into a list of frames. If the terminal + cannot display unicode the frames are converted to plain ASCII. + """ + + last_frame_idx = 0 # Class variable to store the last frame index + + def __init__(self, text: str, width: int = 7): + self.text = text + self.start_time = time.time() + self.last_update = 0.0 + self.visible = False + self.is_tty = sys.stdout.isatty() + self.console = Console() + + # Pre-render the animation frames using pure ASCII so they will + # always display, even on very limited terminals. + ascii_frames = [ + "#= ", # C1 C2 space(8) + "=# ", # C2 C1 space(8) + " =# ", # space(1) C2 C1 space(7) + " =# ", # space(2) C2 C1 space(6) + " =# ", # space(3) C2 C1 space(5) + " =# ", # space(4) C2 C1 space(4) + " =# ", # space(5) C2 C1 space(3) + " =# ", # space(6) C2 C1 space(2) + " =# ", # space(7) C2 C1 space(1) + " =#", # space(8) C2 C1 + " #=", # space(8) C1 C2 + " #= ", # space(7) C1 C2 space(1) + " #= ", # space(6) C1 C2 space(2) + " #= ", # space(5) C1 C2 space(3) + " #= ", # space(4) C1 C2 space(4) + " #= ", # space(3) C1 C2 space(5) + " #= ", # space(2) C1 C2 space(6) + " #= ", # space(1) C1 C2 space(7) + ] + + self.unicode_palette = "β–‘β–ˆ" + xlate_from, xlate_to = ("=#", self.unicode_palette) + + # If unicode is supported, swap the ASCII chars for nicer glyphs. + if self._supports_unicode(): + translation_table = str.maketrans(xlate_from, xlate_to) + frames = [f.translate(translation_table) for f in ascii_frames] + self.scan_char = xlate_to[xlate_from.find("#")] + else: + frames = ascii_frames + self.scan_char = "#" + + # Bounce the scanner back and forth. + self.frames = frames + self.frame_idx = Spinner.last_frame_idx # Initialize from class variable + self.width = len(frames[0]) - 2 # number of chars between the brackets + self.animation_len = len(frames[0]) + self.last_display_len = 0 # Length of the last spinner line (frame + text) + + def _supports_unicode(self) -> bool: + if not self.is_tty: + return False + try: + out = self.unicode_palette + out += "\b" * len(self.unicode_palette) + out += " " * len(self.unicode_palette) + out += "\b" * len(self.unicode_palette) + sys.stdout.write(out) + sys.stdout.flush() + return True + except UnicodeEncodeError: + return False + except Exception: + return False + + def _next_frame(self) -> str: + frame = self.frames[self.frame_idx] + self.frame_idx = (self.frame_idx + 1) % len(self.frames) + Spinner.last_frame_idx = self.frame_idx # Update class variable + return frame + + def step(self, text: str = None) -> None: + if text is not None: + self.text = text + + if not self.is_tty: + return + + now = time.time() + if not self.visible and now - self.start_time >= 0.5: + self.visible = True + self.last_update = 0.0 + if self.is_tty: + self.console.show_cursor(False) + + if not self.visible or now - self.last_update < 0.1: + return + + self.last_update = now + frame_str = self._next_frame() + + # Determine the maximum width for the spinner line + # Subtract 2 as requested, to leave a margin or prevent cursor wrapping issues + max_spinner_width = self.console.width - 2 + if max_spinner_width < 0: # Handle extremely narrow terminals + max_spinner_width = 0 + + current_text_payload = f" {self.text}" + line_to_display = f"{frame_str}{current_text_payload}" + + # Truncate the line if it's too long for the console width + if len(line_to_display) > max_spinner_width: + line_to_display = line_to_display[:max_spinner_width] + + len_line_to_display = len(line_to_display) + + # Calculate padding to clear any remnants from a longer previous line + padding_to_clear = " " * max(0, self.last_display_len - len_line_to_display) + + # Write the spinner frame, text, and any necessary clearing spaces + sys.stdout.write(f"\r{line_to_display}{padding_to_clear}") + self.last_display_len = len_line_to_display + + # Calculate number of backspaces to position cursor at the scanner character + scan_char_abs_pos = frame_str.find(self.scan_char) + + # Total characters written to the line (frame + text + padding) + total_chars_written_on_line = len_line_to_display + len(padding_to_clear) + + # num_backspaces will be non-positive if scan_char_abs_pos is beyond + # total_chars_written_on_line (e.g., if the scan char itself was truncated). + # (e.g., if the scan char itself was truncated). + # In such cases, (effectively) 0 backspaces are written, + # and the cursor stays at the end of the line. + num_backspaces = total_chars_written_on_line - scan_char_abs_pos + sys.stdout.write("\b" * num_backspaces) + sys.stdout.flush() + + def end(self) -> None: + if self.visible and self.is_tty: + clear_len = self.last_display_len # Use the length of the last displayed content + sys.stdout.write("\r" + " " * clear_len + "\r") + sys.stdout.flush() + self.console.show_cursor(True) + self.visible = False + + +class WaitingSpinner: + """Background spinner that can be started/stopped safely.""" + + def __init__(self, text: str = "Waiting for LLM", delay: float = 0.15): + self.spinner = Spinner(text) + self.delay = delay + self._stop_event = threading.Event() + self._thread = threading.Thread(target=self._spin, daemon=True) + + def _spin(self): + while not self._stop_event.is_set(): + self.spinner.step() + time.sleep(self.delay) + self.spinner.end() + + def start(self): + """Start the spinner in a background thread.""" + if not self._thread.is_alive(): + self._thread.start() + + def stop(self): + """Request the spinner to stop and wait briefly for the thread to exit.""" + self._stop_event.set() + if self._thread.is_alive(): + self._thread.join(timeout=self.delay) + self.spinner.end() + + # Allow use as a context-manager + def __enter__(self): + self.start() + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.stop() + + +def main(): + spinner = Spinner("Running spinner...") + try: + for _ in range(100): + time.sleep(0.15) + spinner.step() + print("Success!") + except KeyboardInterrupt: + print("\nInterrupted by user.") + finally: + spinner.end() + + +if __name__ == "__main__": + main() diff --git a/aider/watch.py b/aider/watch.py index e7b115730..5d0e95a4f 100644 --- a/aider/watch.py +++ b/aider/watch.py @@ -34,6 +34,8 @@ def load_gitignores(gitignore_paths: list[Path]) -> Optional[PathSpec]: "__pycache__/", # Python cache dir ".DS_Store", # macOS metadata "Thumbs.db", # Windows thumbnail cache + "*.svg", + "*.pdf", # IDE files ".idea/", # JetBrains IDEs ".vscode/", # VS Code @@ -64,7 +66,9 @@ class FileWatcher: """Watches source files for changes and AI comments""" # Compiled regex pattern for AI comments - ai_comment_pattern = re.compile(r"(?:#|//|--|;+) *(ai\b.*|ai\b.*|.*\bai[?!]?) *$", re.IGNORECASE) + ai_comment_pattern = re.compile( + r"(?:#|//|--|;+) *(ai\b.*|ai\b.*|.*\bai[?!]?) *$", re.IGNORECASE + ) def __init__(self, coder, gitignores=None, verbose=False, analytics=None, root=None): self.coder = coder @@ -93,15 +97,19 @@ class FileWatcher: rel_path = path_abs.relative_to(self.root) if self.verbose: - dump(rel_path) + print("Changed", rel_path) if self.gitignore_spec and self.gitignore_spec.match_file( rel_path.as_posix() + ("/" if path_abs.is_dir() else "") ): return False + # Check file size before reading content + if path_abs.is_file() and path_abs.stat().st_size > 1 * 1024 * 1024: # 1MB limit + return False + if self.verbose: - dump("ok", rel_path) + print("Checking", rel_path) # Check if file contains AI markers try: diff --git a/aider/website/HISTORY.md b/aider/website/HISTORY.md index 20b70ec6a..d32a1215a 100644 --- a/aider/website/HISTORY.md +++ b/aider/website/HISTORY.md @@ -24,7 +24,153 @@ cog.out(text) ]]]--> +### Aider v0.86.0 + +- Expanded GPT-5 model support across family variants and providers (OpenAI, Azure, OpenRouter), including dated and chat/mini/nano variants. +- Aider wrote 88% of the code in this release. + +### Aider v0.85.5 + +- Enforced diff edit format for GPT-5 models. +- Added support for the reasoning_effort setting for GPT-5 models. +- Fixed model detection to correctly apply GPT-5 settings to versioned names (gpt-5 and gpt-5-2025-08-07). + +### Aider v0.85.4 + +- Added support for openai/gpt-5 +- Fixed analytics to support the latest PostHog SDK event-capture API. +- Disabled temperature when using GPT-5 models for more deterministic outputs. + +### Aider v0.85.3 + +- Bumped dependencies to pick up latest litellm==1.75.0. + +### Aider v0.85.2 + +- Added support for Grok-4 via `xai/grok-4` and `openrouter/x-ai/grok-4` model names. +- Added support for `gemini/gemini-2.5-flash-lite-preview-06-17` model, by Tamir Zahavi-Brunner. +- `/clear` now prints β€œAll chat history cleared.” so you know it worked, by Zexin Yuan. +- `/undo` output now shows only the first line of each commit message, making it easier to read. +- Fixed an issue where new settings for an existing model didn't replace the old ones, by Andrew Grigorev. +- Added support for `openrouter/moonshotai/kimi-k2` model, by Jack Harrington. + +### Aider v0.85.1 + +- Display model announcements with no-arg `/model` command. + +### Aider v0.85.0 + +- Support for Responses API models like o1-pro, o3-pro. +- Updated pricing for o3. +- Added support for new Gemini models including `gemini-2.5-pro`, `gemini-2.5-flash`, and `gemini-2.5-pro-preview-06-05` with thinking tokens support. +- Updated model aliases: `flash` now points to `gemini-2.5-flash` and `gemini` now points to `gemini-2.5-pro`. +- Added `--add-gitignore-files` flag to enable adding files listed in .gitignore to Aider's editing scope, by omarcinkonis. +- Added `--commit-language` option to specify the language for commit messages, by Kyosuke Takayama. +- Enhanced thinking tokens support: can now be disabled by setting to 0, and improved help text with examples. +- Added MATLAB language support for repository maps, by Matthew Tofano. +- Added support for OpenAI o3-pro model across multiple providers. +- Improved GitHub Copilot token handling with better validation and error messages, by Vincent Taverna and Sebastian Estrella. +- Fixed encoding issues in git diff output and LLM history logging. +- Enhanced commit message generation to use system prompt prefixes, by Luke Reeves. +- Improved inline code rendering in Rich markdown output, by Vamsi Talupula. +- Fixed Vertex AI model name prefixes in settings, by Wietse Venema. +- Improved `/read-only` command to resolve literal paths correctly, by Matteo Landi. +- Skip expensive file tracking operations when `--skip-sanity-check-repo` is enabled for better performance, by Makar Ivashko. +- Ensure pip is available before package installation. +- Auto-create parent directories for chat history files to prevent startup errors, by contributor. +- Fixed search block regex to accept optional closing tags when working with HTML content, by Mathis Beer. +- Co-authored-by attribution is now enabled by default for commit messages. +- Added Clojure language support for repository maps, by Garrett Hopper. +- Added custom PostHog analytics configuration options with `--analytics-posthog-host` and `--analytics-posthog-project-api-key` flags, by Vasil Markoukin. +- Optimized chat history summarization performance, by jayeshthk. +- Improved kebab-case identifier recognition in repository maps for better code analysis. +- Increased max tokens for Deepseek models to 65536 for better performance. +- Aider wrote 21% of the code in this release. + +### Aider v0.84.0 + +- Added support for new Claude models including the Sonnet 4 and Opus 4 series (e.g., `claude-sonnet-4-20250514`, +`claude-opus-4-20250514`) across various providers. The default `sonnet` and `opus` aliases were updated to these newer +versions. +- Added support for the `vertex_ai/gemini-2.5-flash-preview-05-20` model. +- Fixed OpenRouter token cost calculation for improved accuracy. +- Updated default OpenRouter models during onboarding to `deepseek/deepseek-r1:free` for the free tier and +`anthropic/claude-sonnet-4` for paid tiers. +- Automatically refresh GitHub Copilot tokens when used as OpenAI API keys, by Lih Chen. +- Aider wrote 79% of the code in this release. + +### Aider v0.83.2 + +- Bumped configargparse to 1.7.1 as 1.7 was pulled. +- Added shell tab completion for file path arguments (by saviour) and for `--edit-format`/`--editor-edit-format` options. +- Improved OpenRouter model metadata handling by introducing a local cache, increasing reliability and performance. +- The `/settings` command now displays detailed metadata for active main, editor, and weak models. +- Fixed an issue where files explicitly added via the command line were not correctly ignored if listed in `.gitignore`. +- Improved automatic commit messages by providing more context during their generation, by wangboxue. + +### Aider v0.83.1 + +- Improved user language detection by correctly normalizing hyphenated language codes (e.g., `en-US` to `en`) and enhancing the validation of locale results. +- Prevented Aider from instructing the LLM to reply in 'C' or 'POSIX' when these are detected as the system locale. +- Displayed a spinner with the model name when generating commit messages. + +### Aider v0.83.0 + +- Added support for `gemini-2.5-pro-preview-05-06` models. +- Added support for `qwen3-235b` models. +- Added repo-map support for OCaml and OCaml interface files, by Andrey Popp. +- Added a spinner animation while waiting for the LLM to start streaming its response. +- Updated the spinner animation to a Knight Rider style. +- Introduced `--attribute-co-authored-by` option to add co-author trailer to commit messages, by Andrew Grigorev. +- Updated Gemini model aliases (e.g., `gemini`, `gemini-2.5-pro`) to point to the `05-06` preview versions. +- Marked Gemini 2.5 Pro preview models as `overeager` by default. +- Commit message prompt specifies the user's language. +- Updated the default weak model for Gemini 2.5 Pro models to `gemini/gemini-2.5-flash-preview-04-17`. +- Corrected `gemini-2.5-pro-exp-03-25` model settings to reflect its lack of support for `thinking_budget`. +- Ensured model-specific system prompt prefixes are placed on a new line before the main system prompt. +- Added tracking of total tokens sent and received, now included in benchmark statistics. +- Automatically fetch model parameters (context window, pricing) for OpenRouter models directly from their website, by Stefan Hladnik. +- Enabled support for `thinking_tokens` and `reasoning_effort` parameters for OpenRouter models. +- Improved cost calculation using `litellm.completion_cost` where available. +- Added model settings for `openrouter/google/gemini-2.5-pro-preview-03-25`. +- Added `--disable-playwright` flag to prevent Playwright installation prompts and usage, by Andrew Grigorev. +- The `aider scrape` command-line tool will now use Playwright for web scraping if it is available, by Jon Keys. +- Fixed linter command execution on Windows by adopting `oslex` for argument quoting, by Titusz Pan. +- Improved cross-platform display of shell commands by using `oslex` for robust argument quoting, by Titusz Pan. +- Improved `/ask` mode to instruct the LLM to elide unchanging code in its responses. +- Ensured web scraping in the GUI also respects Playwright availability and the `--disable-playwright` flag. +- Improved display of filenames in the prompt header using rich Text formatting. +- Enabled `reasoning_effort` for Gemini 2.5 Flash models. +- Added a `--shell-completions` argument to generate shell completion scripts (e.g., for bash, zsh). +- Explicit `--attribute-author` or `--attribute-committer` flags now override the default behavior when `--attribute-co-authored-by` is used, allowing finer control over commit attribution, by Andrew Grigorev. +- Fixed an issue where read-only status of files might not be preserved correctly by some commands (e.g. `/drop` after adding a read-only file). +- The `aider-args` utility (or `python -m aider.args`) now defaults to printing a sample YAML configuration if no arguments are provided. +- Displayed token count progress and the name of the file or identifier being processed during repo map updates. +- Extended the waiting spinner to also show for non-streaming responses and further enhanced its animation with console width clipping, cursor hiding, and a more continuous appearance. +- Dropped support for Python 3.9. +- Aider wrote 55% of the code in this release. + +### Aider v0.82.3 + +- Add support for `gemini-2.5-flash-preview-04-17` models. +- Improved robustness of edit block parsing when filenames start with backticks or fences. +- Add new `udiff-simple` edit format, for Gemini 2.5 Pro. +- Update default weak/editor models for Gemini 2.5 Pro models to use `gemini-2.5-flash-preview-04-17`. +- Instruct models to reply in the user's detected system language. +- Fix parsing of diffs for newly created files (`--- /dev/null`). +- Add markdown syntax highlighting support when editing multi-line commit messages via `/commit`, by Kay Gosho. +- Set Gemini 2.5 Pro models to use the `overeager` prompt setting by default. +- Add common file types (`.svg`, `.pdf`) to the default list of ignored files for AI comment scanning (`--watch`). +- Skip scanning files larger than 1MB for AI comments (`--watch`). + +### Aider v0.82.2 + +- Fix editing shell files with diff-fenced, by zjy1412. +- Improve robustness of patch application by allowing multiple update/delete actions for the same file within a single response. +- Update prompts to instruct LLMs to consolidate all edits for a given file into a single block within the patch. + ### Aider v0.82.1 + - Added support for `o3` and `o4-mini` including provider-specific versions for OpenAI, OpenRouter, and Azure. - Added support for Azure specific `gpt-4.1` and `gpt-4.1-mini` models. - Disabled streaming for `o3` models since you need identity verification to stream. @@ -372,7 +518,7 @@ cog.out(text) - [Aider works with LLM web chat UIs](https://aider.chat/docs/usage/copypaste.html). - New `--copy-paste` mode. - New `/copy-context` command. -- [Set API keys and other environment variables for all providers from command line or yaml conf file](https://aider.chat/docs/config/aider_conf.html#storing-llm-keys). +- [Set API keys and other environment variables for all providers from command line or YAML conf file](https://aider.chat/docs/config/aider_conf.html#storing-llm-keys). - New `--api-key provider=key` setting. - New `--set-env VAR=value` setting. - Added bash and zsh support to `--watch-files`. @@ -540,7 +686,7 @@ cog.out(text) ### Aider v0.59.1 -- Check for obsolete `yes: true` in yaml config, show helpful error. +- Check for obsolete `yes: true` in YAML config, show helpful error. - Model settings for openrouter/anthropic/claude-3.5-sonnet:beta ### Aider v0.59.0 @@ -550,7 +696,7 @@ cog.out(text) - Still auto-completes the full paths of the repo files like `/add`. - Now supports globs like `src/**/*.py` - Renamed `--yes` to `--yes-always`. - - Now uses `AIDER_YES_ALWAYS` env var and `yes-always:` yaml key. + - Now uses `AIDER_YES_ALWAYS` env var and `yes-always:` YAML key. - Existing YAML and .env files will need to be updated. - Can still abbreviate to `--yes` on the command line. - Config file now uses standard YAML list syntax with ` - list entries`, one per line. @@ -757,7 +903,7 @@ cog.out(text) - Use `--map-refresh ` to configure. - Improved cost estimate logic for caching. - Improved editing performance on Jupyter Notebook `.ipynb` files. -- Show which config yaml file is loaded with `--verbose`. +- Show which config YAML file is loaded with `--verbose`. - Bumped dependency versions. - Bugfix: properly load `.aider.models.metadata.json` data. - Bugfix: Using `--msg /ask ...` caused an exception. diff --git a/aider/website/_config.yml b/aider/website/_config.yml index 20eebdd5e..c6e12f11e 100644 --- a/aider/website/_config.yml +++ b/aider/website/_config.yml @@ -32,7 +32,7 @@ aux_links: "GitHub": - "https://github.com/Aider-AI/aider" "Discord": - - "https://discord.gg/Tv2uQnR88V" + - "https://discord.gg/Y7X7bhMQFV" "Blog": - "/blog/" @@ -40,7 +40,7 @@ nav_external_links: - title: "GitHub" url: "https://github.com/Aider-AI/aider" - title: "Discord" - url: "https://discord.gg/Tv2uQnR88V" + url: "https://discord.gg/Y7X7bhMQFV" repository: Aider-AI/aider diff --git a/aider/website/_data/blame.yml b/aider/website/_data/blame.yml index a5d280d60..2d302504e 100644 --- a/aider/website/_data/blame.yml +++ b/aider/website/_data/blame.yml @@ -1,5 +1,5 @@ -- aider_percentage: 29.08 - aider_total: 41 +- aider_percentage: 31.33 + aider_total: 47 end_date: '2023-06-15' end_tag: v0.6.0 file_counts: @@ -17,44 +17,44 @@ Paul Gauthier: 6 Paul Gauthier (aider): 1 aider/utils.py: - Paul Gauthier: 22 - Paul Gauthier (aider): 17 + Paul Gauthier: 25 + Paul Gauthier (aider): 21 setup.py: Paul Gauthier: 7 Paul Gauthier (aider): 7 tests/test_utils.py: - Paul Gauthier (aider): 7 + Paul Gauthier (aider): 9 grand_total: - Paul Gauthier: 100 - Paul Gauthier (aider): 41 + Paul Gauthier: 103 + Paul Gauthier (aider): 47 start_tag: v0.5.0 - total_lines: 141 -- aider_percentage: 15.99 - aider_total: 224 + total_lines: 150 +- aider_percentage: 14.36 + aider_total: 209 end_date: '2023-06-25' end_tag: v0.7.0 file_counts: .github/workflows/release.yml: Paul Gauthier: 2 - Paul Gauthier (aider): 25 + Paul Gauthier (aider): 29 aider/__init__.py: Paul Gauthier: 1 aider/coders/__init__.py: Paul Gauthier: 6 aider/coders/base_coder.py: - Paul Gauthier: 305 + Paul Gauthier: 314 aider/coders/editblock_coder.py: - Paul Gauthier: 32 + Paul Gauthier: 35 aider/coders/wholefile_coder.py: - Paul Gauthier: 86 + Paul Gauthier: 115 Paul Gauthier (aider): 3 aider/coders/wholefile_func_coder.py: - Paul Gauthier: 116 + Paul Gauthier: 120 Paul Gauthier (aider): 11 aider/commands.py: Paul Gauthier: 28 aider/diffs.py: - Paul Gauthier: 17 + Paul Gauthier: 18 aider/io.py: Paul Gauthier: 16 aider/main.py: @@ -77,22 +77,22 @@ tests/test_commands.py: Paul Gauthier: 3 tests/test_editblock.py: - Paul Gauthier: 24 + Paul Gauthier: 28 tests/test_main.py: Paul Gauthier: 8 tests/test_models.py: Paul Gauthier: 21 Paul Gauthier (aider): 7 tests/test_wholefile.py: - Paul Gauthier: 67 - Paul Gauthier (aider): 84 + Paul Gauthier: 86 + Paul Gauthier (aider): 65 grand_total: - Paul Gauthier: 1177 - Paul Gauthier (aider): 224 + Paul Gauthier: 1246 + Paul Gauthier (aider): 209 start_tag: v0.6.0 - total_lines: 1401 -- aider_percentage: 8.21 - aider_total: 142 + total_lines: 1455 +- aider_percentage: 7.94 + aider_total: 139 end_date: '2023-07-06' end_tag: v0.8.0 file_counts: @@ -100,21 +100,21 @@ Paul Gauthier: 5 .github/workflows/windows-tests.yml: Paul Gauthier: 13 - Paul Gauthier (aider): 25 + Paul Gauthier (aider): 15 aider/__init__.py: Paul Gauthier: 1 aider/coders/__init__.py: Paul Gauthier: 10 aider/coders/base_coder.py: - Paul Gauthier: 159 + Paul Gauthier: 161 Paul Gauthier (aider): 5 aider/coders/editblock_coder.py: Paul Gauthier: 14 aider/coders/editblock_func_coder.py: - Paul Gauthier: 123 + Paul Gauthier: 131 Paul Gauthier (aider): 8 aider/coders/single_wholefile_func_coder.py: - Paul Gauthier: 45 + Paul Gauthier: 49 aider/coders/wholefile_coder.py: Paul Gauthier: 24 aider/coders/wholefile_func_coder.py: @@ -137,7 +137,7 @@ benchmark/Dockerfile: Paul Gauthier: 7 benchmark/benchmark.py: - Paul Gauthier: 446 + Paul Gauthier: 447 Paul Gauthier (aider): 29 benchmark/docker.sh: Paul Gauthier: 11 @@ -149,16 +149,16 @@ benchmark/rungrid.py: Paul Gauthier: 60 benchmark/test_benchmark.py: - Paul Gauthier: 34 - Paul Gauthier (aider): 13 + Paul Gauthier: 35 + Paul Gauthier (aider): 12 tests/test_coder.py: - Paul Gauthier: 87 - Paul Gauthier (aider): 24 + Paul Gauthier: 101 + Paul Gauthier (aider): 32 tests/test_commands.py: - Paul Gauthier: 14 + Paul Gauthier: 21 Paul Gauthier (aider): 17 tests/test_editblock.py: - Paul Gauthier: 94 + Paul Gauthier: 86 tests/test_io.py: Paul Gauthier: 3 Paul Gauthier (aider): 6 @@ -167,22 +167,22 @@ tests/test_repomap.py: Paul Gauthier: 26 tests/test_wholefile.py: - Paul Gauthier: 193 + Paul Gauthier: 189 grand_total: - Paul Gauthier: 1582 - Paul Gauthier (aider): 142 + Paul Gauthier: 1607 + Paul Gauthier (aider): 139 kwmiebach: 5 start_tag: v0.7.0 - total_lines: 1729 -- aider_percentage: 17.67 - aider_total: 144 + total_lines: 1751 +- aider_percentage: 18.95 + aider_total: 170 end_date: '2023-07-16' end_tag: v0.9.0 file_counts: aider/__init__.py: Paul Gauthier: 1 aider/coders/base_coder.py: - Paul Gauthier: 74 + Paul Gauthier: 75 aider/coders/editblock_coder.py: Paul Gauthier: 8 aider/coders/single_wholefile_func_coder.py: @@ -192,72 +192,72 @@ aider/coders/wholefile_func_coder.py: Paul Gauthier: 1 aider/commands.py: - Paul Gauthier: 86 + Paul Gauthier: 87 Paul Gauthier (aider): 4 aider/io.py: - Paul Gauthier: 7 + Paul Gauthier: 8 aider/main.py: - Paul Gauthier: 126 - Paul Gauthier (aider): 59 + Paul Gauthier: 162 + Paul Gauthier (aider): 57 aider/repomap.py: - Paul Gauthier: 36 + Paul Gauthier: 37 aider/utils.py: Paul Gauthier: 8 benchmark/benchmark.py: Paul Gauthier: 3 scripts/versionbump.py: Paul Gauthier: 15 - Paul Gauthier (aider): 10 + Paul Gauthier (aider): 13 setup.py: Paul Gauthier (aider): 1 tests/test_coder.py: Paul Gauthier: 110 - Paul Gauthier (aider): 23 + Paul Gauthier (aider): 30 tests/test_commands.py: Paul Gauthier: 36 - Paul Gauthier (aider): 43 + Paul Gauthier (aider): 61 tests/test_editblock.py: Paul Gauthier: 1 tests/test_io.py: Paul Gauthier: 1 tests/test_main.py: - Paul Gauthier: 12 + Paul Gauthier: 20 tests/test_repomap.py: Paul Gauthier: 13 Paul Gauthier (aider): 1 tests/test_wholefile.py: - Paul Gauthier: 42 + Paul Gauthier: 50 tests/utils.py: Paul Gauthier: 43 Paul Gauthier (aider): 3 grand_total: - Paul Gauthier: 671 - Paul Gauthier (aider): 144 + Paul Gauthier: 727 + Paul Gauthier (aider): 170 start_tag: v0.8.0 - total_lines: 815 -- aider_percentage: 11.34 - aider_total: 33 + total_lines: 897 +- aider_percentage: 12.26 + aider_total: 39 end_date: '2023-07-22' end_tag: v0.10.0 file_counts: aider/__init__.py: Paul Gauthier: 1 aider/coders/base_coder.py: - Paul Gauthier: 23 + Paul Gauthier: 24 aider/coders/editblock_coder.py: Paul Gauthier: 11 aider/coders/single_wholefile_func_coder.py: - Paul Gauthier: 1 + Paul Gauthier: 2 aider/coders/wholefile_coder.py: - Paul Gauthier: 1 + Paul Gauthier: 2 aider/coders/wholefile_func_coder.py: - Paul Gauthier: 1 + Paul Gauthier: 2 aider/commands.py: - Amer Amayreh: 8 - Paul Gauthier (aider): 4 + Amer Amayreh: 4 + Paul Gauthier (aider): 12 aider/io.py: - Paul Gauthier: 3 - Paul Gauthier (aider): 6 + Paul Gauthier: 4 + Paul Gauthier (aider): 5 aider/main.py: Paul Gauthier: 62 aider/versioncheck.py: @@ -268,32 +268,32 @@ scripts/versionbump.py: Paul Gauthier (aider): 2 tests/test_coder.py: - Paul Gauthier: 35 + Paul Gauthier: 43 tests/test_commands.py: - Paul Gauthier: 22 - Paul Gauthier (aider): 13 + Paul Gauthier: 31 + Paul Gauthier (aider): 12 tests/test_editblock.py: - Paul Gauthier: 17 + Paul Gauthier: 20 tests/test_main.py: Paul Gauthier: 44 Paul Gauthier (aider): 3 tests/utils.py: Paul Gauthier: 6 grand_total: - Amer Amayreh: 8 - Paul Gauthier: 250 - Paul Gauthier (aider): 33 + Amer Amayreh: 4 + Paul Gauthier: 275 + Paul Gauthier (aider): 39 start_tag: v0.9.0 - total_lines: 291 -- aider_percentage: 6.62 - aider_total: 49 + total_lines: 318 +- aider_percentage: 6.63 + aider_total: 55 end_date: '2023-08-02' end_tag: v0.11.0 file_counts: aider/__init__.py: Paul Gauthier: 1 aider/coders/base_coder.py: - Paul Gauthier: 104 + Paul Gauthier: 119 aider/coders/wholefile_coder.py: Paul Gauthier: 2 aider/commands.py: @@ -306,34 +306,34 @@ Paul Gauthier: 86 Paul Gauthier (aider): 3 aider/repo.py: - Paul Gauthier: 113 - Paul Gauthier (aider): 7 + Paul Gauthier: 133 + Paul Gauthier (aider): 13 aider/sendchat.py: Paul Gauthier: 64 scripts/versionbump.py: Paul Gauthier: 4 tests/test_coder.py: - Paul Gauthier: 26 + Paul Gauthier: 35 tests/test_commands.py: Paul Gauthier: 53 Paul Gauthier (aider): 6 tests/test_main.py: - Paul Gauthier: 24 + Paul Gauthier: 30 Paul Gauthier (aider): 1 tests/test_repo.py: - Paul Gauthier: 56 + Paul Gauthier: 75 Paul Gauthier (aider): 5 tests/test_sendchat.py: - Paul Gauthier: 11 + Paul Gauthier: 25 tests/utils.py: Paul Gauthier: 6 grand_total: - Paul Gauthier: 691 - Paul Gauthier (aider): 49 + Paul Gauthier: 774 + Paul Gauthier (aider): 55 start_tag: v0.10.0 - total_lines: 740 -- aider_percentage: 4.71 - aider_total: 24 + total_lines: 829 +- aider_percentage: 5.21 + aider_total: 28 end_date: '2023-08-11' end_tag: v0.12.0 file_counts: @@ -343,13 +343,13 @@ Arseniy Pavlenko: 3 Paul Gauthier: 4 aider/coders/editblock_coder.py: - Paul Gauthier: 123 + Paul Gauthier: 124 aider/commands.py: Joshua Vial: 2 Paul Gauthier: 17 Paul Gauthier (aider): 3 aider/history.py: - Paul Gauthier: 6 + Paul Gauthier: 10 aider/io.py: Paul Gauthier: 10 aider/main.py: @@ -364,27 +364,27 @@ Paul Gauthier: 77 Paul Gauthier (aider): 8 benchmark/benchmark.py: - Paul Gauthier: 57 + Paul Gauthier: 60 scripts/versionbump.py: Paul Gauthier: 1 tests/test_coder.py: Paul Gauthier: 1 - Paul Gauthier (aider): 13 + Paul Gauthier (aider): 17 tests/test_commands.py: - Paul Gauthier: 19 + Paul Gauthier: 22 tests/test_editblock.py: - Paul Gauthier: 43 + Paul Gauthier: 52 tests/test_repo.py: - Paul Gauthier: 55 + Paul Gauthier: 58 grand_total: Arseniy Pavlenko: 3 Joshua Vial: 2 - Paul Gauthier: 481 - Paul Gauthier (aider): 24 + Paul Gauthier: 504 + Paul Gauthier (aider): 28 start_tag: v0.11.0 - total_lines: 510 -- aider_percentage: 4.32 - aider_total: 23 + total_lines: 537 +- aider_percentage: 4.18 + aider_total: 24 end_date: '2023-08-22' end_tag: v0.13.0 file_counts: @@ -395,7 +395,7 @@ aider/__init__.py: Paul Gauthier: 1 aider/coders/base_coder.py: - Paul Gauthier: 89 + Paul Gauthier: 93 Paul Gauthier (aider): 2 aider/coders/editblock_coder.py: Paul Gauthier: 6 @@ -410,31 +410,31 @@ aider/commands.py: Paul Gauthier: 34 aider/io.py: - Paul Gauthier: 7 + Paul Gauthier: 8 aider/main.py: Paul Gauthier: 2 - Paul Gauthier (aider): 19 + Paul Gauthier (aider): 20 aider/repo.py: - Paul Gauthier: 56 + Paul Gauthier: 59 aider/voice.py: - Paul Gauthier: 24 + Paul Gauthier: 26 setup.py: Paul Gauthier (aider): 1 tests/test_coder.py: - Paul Gauthier: 255 + Paul Gauthier: 277 Paul Gauthier (aider): 1 tests/test_main.py: Paul Gauthier: 1 tests/test_repo.py: - Paul Gauthier: 9 + Paul Gauthier: 17 tests/test_wholefile.py: Paul Gauthier: 1 grand_total: - Paul Gauthier: 510 - Paul Gauthier (aider): 23 + Paul Gauthier: 550 + Paul Gauthier (aider): 24 start_tag: v0.12.0 - total_lines: 533 -- aider_percentage: 0.55 + total_lines: 574 +- aider_percentage: 0.53 aider_total: 1 end_date: '2023-09-08' end_tag: v0.14.0 @@ -442,7 +442,7 @@ aider/__init__.py: Paul Gauthier: 1 aider/coders/base_coder.py: - Joshua Vial: 19 + Joshua Vial: 20 Paul Gauthier: 4 aider/commands.py: JV: 1 @@ -453,10 +453,10 @@ JV: 1 Joshua Vial: 1 aider/models/__init__.py: - JV: 2 - Paul Gauthier: 13 + JV: 1 + Paul Gauthier: 14 aider/models/model.py: - JV: 21 + JV: 27 Joshua Vial: 4 Paul Gauthier: 8 aider/models/openai.py: @@ -484,14 +484,14 @@ Joshua Vial: 22 Paul Gauthier: 13 grand_total: - JV: 62 - Joshua Vial: 59 - Paul Gauthier: 60 + JV: 67 + Joshua Vial: 60 + Paul Gauthier: 61 Paul Gauthier (aider): 1 start_tag: v0.13.0 - total_lines: 182 -- aider_percentage: 11.28 - aider_total: 38 + total_lines: 189 +- aider_percentage: 10.57 + aider_total: 41 end_date: '2023-10-20' end_tag: v0.15.0 file_counts: @@ -508,15 +508,15 @@ Paul Gauthier: 49 aider/main.py: Paul Gauthier: 29 - Paul Gauthier (aider): 21 - Thinh Nguyen: 6 + Paul Gauthier (aider): 24 + Thinh Nguyen: 7 aider/repo.py: Paul Gauthier: 26 Paul Gauthier (aider): 2 aider/repomap.py: Paul Gauthier: 11 aider/voice.py: - Paul Gauthier: 8 + Paul Gauthier: 9 benchmark/Dockerfile: Joshua Vial: 1 benchmark/benchmark.py: @@ -526,20 +526,20 @@ scripts/versionbump.py: Paul Gauthier: 2 tests/test_commands.py: - Paul Gauthier: 95 + Paul Gauthier: 123 tests/test_main.py: Paul Gauthier: 17 tests/test_repo.py: - Paul Gauthier: 20 + Paul Gauthier: 38 grand_total: Alexander Kjeldaas (aider): 1 Joshua Vial: 2 - Paul Gauthier: 289 - Paul Gauthier (aider): 37 - Thinh Nguyen: 8 + Paul Gauthier: 336 + Paul Gauthier (aider): 40 + Thinh Nguyen: 9 start_tag: v0.14.0 - total_lines: 337 -- aider_percentage: 1.76 + total_lines: 388 +- aider_percentage: 1.71 aider_total: 16 end_date: '2023-10-29' end_tag: v0.16.0 @@ -587,7 +587,7 @@ aider/queries/tree-sitter-typescript-tags.scm: Paul Gauthier: 23 aider/repomap.py: - Paul Gauthier: 187 + Paul Gauthier: 193 Paul Gauthier (aider): 2 benchmark/Dockerfile: Paul Gauthier: 4 @@ -597,26 +597,28 @@ Paul Gauthier: 2 Paul Gauthier (aider): 2 tests/test_coder.py: - Paul Gauthier: 19 + Paul Gauthier: 21 tests/test_commands.py: - Paul Gauthier: 5 + Paul Gauthier: 10 + paul-gauthier: 1 tests/test_editblock.py: - Paul Gauthier: 44 + Paul Gauthier: 55 tests/test_repomap.py: Paul Gauthier: 5 grand_total: - Paul Gauthier: 894 + Paul Gauthier: 918 Paul Gauthier (aider): 16 + paul-gauthier: 1 start_tag: v0.15.0 - total_lines: 910 -- aider_percentage: 5.35 - aider_total: 13 + total_lines: 935 +- aider_percentage: 7.91 + aider_total: 22 end_date: '2023-11-06' end_tag: v0.17.0 file_counts: .github/workflows/docker-build-test.yml: - Paul Gauthier: 7 - Paul Gauthier (aider): 7 + Paul Gauthier: 11 + Paul Gauthier (aider): 16 .github/workflows/release.yml: Paul Gauthier: 4 aider/__init__.py: @@ -632,9 +634,9 @@ aider/io.py: Paul Gauthier: 1 aider/main.py: - Paul Gauthier: 1 + Paul Gauthier: 3 aider/models/openai.py: - Paul Gauthier: 8 + Paul Gauthier: 9 aider/queries/tree-sitter-elisp-tags.scm: Paul Gauthier: 3 aider/repomap.py: @@ -649,29 +651,29 @@ Jack Hallam: 3 Paul Gauthier: 10 tests/test_commands.py: - Paul Gauthier: 51 + Paul Gauthier: 65 tests/test_editblock.py: - Paul Gauthier: 21 + Paul Gauthier: 23 tests/test_io.py: Paul Gauthier: 24 tests/utils.py: - Paul Gauthier: 3 + Paul Gauthier: 6 grand_total: Jack Hallam: 3 Omri Bloch: 1 - Paul Gauthier: 226 - Paul Gauthier (aider): 13 + Paul Gauthier: 252 + Paul Gauthier (aider): 22 start_tag: v0.16.0 - total_lines: 243 -- aider_percentage: 39.3 - aider_total: 90 + total_lines: 278 +- aider_percentage: 38.49 + aider_total: 107 end_date: '2023-11-17' end_tag: v0.18.0 file_counts: aider/__init__.py: Paul Gauthier: 1 aider/coders/base_coder.py: - Paul Gauthier: 27 + Paul Gauthier: 33 aider/commands.py: Paul Gauthier: 12 Paul Gauthier (aider): 3 @@ -683,27 +685,27 @@ Paul Gauthier: 10 benchmark/benchmark.py: Paul Gauthier: 22 - Paul Gauthier (aider): 33 + Paul Gauthier (aider): 50 benchmark/rungrid.py: Paul Gauthier: 16 scripts/versionbump.py: Paul Gauthier (aider): 41 tests/test_coder.py: - Paul Gauthier: 14 + Paul Gauthier: 25 tests/test_commands.py: - Paul Gauthier: 10 + Paul Gauthier: 19 tests/test_main.py: - Paul Gauthier: 3 + Paul Gauthier: 4 Paul Gauthier (aider): 13 tests/test_repomap.py: - Paul Gauthier: 8 + Paul Gauthier: 13 grand_total: - Paul Gauthier: 139 - Paul Gauthier (aider): 90 + Paul Gauthier: 171 + Paul Gauthier (aider): 107 start_tag: v0.17.0 - total_lines: 229 -- aider_percentage: 0.72 - aider_total: 13 + total_lines: 278 +- aider_percentage: 0.75 + aider_total: 14 end_date: '2023-12-19' end_tag: v0.19.0 file_counts: @@ -712,13 +714,13 @@ aider/coders/__init__.py: Paul Gauthier: 2 aider/coders/base_coder.py: - Paul Gauthier: 54 + Paul Gauthier: 66 aider/coders/editblock_coder.py: Paul Gauthier: 2 aider/coders/search_replace.py: - Paul Gauthier: 767 + Paul Gauthier: 769 aider/coders/udiff_coder.py: - Paul Gauthier: 389 + Paul Gauthier: 395 aider/coders/wholefile_coder.py: Paul Gauthier: 2 aider/commands.py: @@ -726,9 +728,9 @@ aider/history.py: Paul Gauthier: 3 aider/main.py: - Paul Gauthier: 41 + Paul Gauthier: 44 Your Name: 3 - Your Name (aider): 13 + Your Name (aider): 14 aider/models/__init__.py: Paul Gauthier: 3 aider/models/model.py: @@ -742,11 +744,11 @@ aider/sendchat.py: Paul Gauthier: 15 aider/utils.py: - Paul Gauthier: 15 + Paul Gauthier: 28 aider/voice.py: Paul Gauthier: 7 benchmark/benchmark.py: - Paul Gauthier: 175 + Paul Gauthier: 200 benchmark/refactor_tools.py: Paul Gauthier: 209 tests/test_coder.py: @@ -757,9 +759,9 @@ Paul Gauthier: 1 tests/test_main.py: Paul Gauthier: 10 - Your Name: 16 + Your Name: 18 tests/test_models.py: - Paul Gauthier: 8 + Paul Gauthier: 10 tests/test_repo.py: Paul Gauthier: 1 tests/test_repomap.py: @@ -769,13 +771,13 @@ tests/test_wholefile.py: Paul Gauthier: 10 grand_total: - Paul Gauthier: 1780 - Your Name: 19 - Your Name (aider): 13 + Paul Gauthier: 1843 + Your Name: 21 + Your Name (aider): 14 start_tag: v0.18.0 - total_lines: 1812 -- aider_percentage: 11.38 - aider_total: 38 + total_lines: 1878 +- aider_percentage: 11.49 + aider_total: 40 end_date: '2024-01-04' end_tag: v0.20.0 file_counts: @@ -784,8 +786,8 @@ aider/__init__.py: Paul Gauthier: 1 aider/coders/base_coder.py: - Joshua Vial: 26 - Paul Gauthier: 23 + Joshua Vial: 28 + Paul Gauthier: 25 aider/coders/search_replace.py: Paul Gauthier: 2 aider/coders/udiff_coder.py: @@ -795,9 +797,9 @@ Christopher Toth: 2 Joshua Vial: 16 Paul Gauthier: 2 - Paul Gauthier (aider): 6 + Paul Gauthier (aider): 7 aider/io.py: - Joshua Vial: 14 + Joshua Vial: 15 aider/models/model.py: Joshua Vial: 43 aider/models/openrouter.py: @@ -813,22 +815,22 @@ benchmark/benchmark.py: Joshua Vial: 16 tests/test_commands.py: - Paul Gauthier: 17 - Paul Gauthier (aider): 20 + Paul Gauthier: 21 + Paul Gauthier (aider): 24 tests/test_models.py: Joshua Vial: 13 tests/test_udiff.py: - Paul Gauthier: 63 - Paul Gauthier (aider): 10 + Paul Gauthier: 66 + Paul Gauthier (aider): 7 grand_total: Christopher Toth: 7 - Joshua Vial: 170 - Paul Gauthier: 119 - Paul Gauthier (aider): 38 + Joshua Vial: 173 + Paul Gauthier: 128 + Paul Gauthier (aider): 40 start_tag: v0.19.0 - total_lines: 334 -- aider_percentage: 19.32 - aider_total: 17 + total_lines: 348 +- aider_percentage: 19.78 + aider_total: 18 end_date: '2024-01-08' end_tag: v0.21.0 file_counts: @@ -841,18 +843,18 @@ aider/coders/udiff_coder.py: Paul Gauthier: 22 aider/main.py: - Paul Gauthier (aider): 9 + Paul Gauthier (aider): 10 aider/versioncheck.py: Paul Gauthier (aider): 8 setup.py: Paul Gauthier: 2 tests/test_udiff.py: - Paul Gauthier: 44 + Paul Gauthier: 46 grand_total: - Paul Gauthier: 71 - Paul Gauthier (aider): 17 + Paul Gauthier: 73 + Paul Gauthier (aider): 18 start_tag: v0.20.0 - total_lines: 88 + total_lines: 91 - aider_percentage: 0.0 aider_total: 0 end_date: '2024-01-22' @@ -865,14 +867,14 @@ aider/coders/udiff_coder.py: Paul Gauthier: 5 aider/commands.py: - Paul Gauthier: 44 + Paul Gauthier: 48 aider/main.py: Paul Gauthier: 2 grand_total: - Paul Gauthier: 54 + Paul Gauthier: 58 start_tag: v0.21.0 - total_lines: 54 -- aider_percentage: 1.16 + total_lines: 58 +- aider_percentage: 1.11 aider_total: 2 end_date: '2024-02-03' end_tag: v0.23.0 @@ -882,25 +884,25 @@ aider/coders/base_coder.py: Paul Gauthier: 10 aider/commands.py: - Paul Gauthier: 2 + Paul Gauthier: 5 aider/main.py: - Paul Gauthier: 13 - Zachary Vorhies: 6 + Paul Gauthier: 15 + Zachary Vorhies: 7 aider/mdstream.py: Paul Gauthier: 120 Paul Gauthier (aider): 2 aider/models/openai.py: Paul Gauthier: 3 benchmark/benchmark.py: - Paul Gauthier: 16 + Paul Gauthier: 17 grand_total: - Paul Gauthier: 165 + Paul Gauthier: 171 Paul Gauthier (aider): 2 - Zachary Vorhies: 6 + Zachary Vorhies: 7 start_tag: v0.22.0 - total_lines: 173 -- aider_percentage: 6.68 - aider_total: 25 + total_lines: 180 +- aider_percentage: 5.07 + aider_total: 19 end_date: '2024-02-10' end_tag: v0.24.0 file_counts: @@ -920,19 +922,19 @@ aider/models/openai.py: Paul Gauthier: 135 aider/scrape.py: - Paul Gauthier: 170 - Paul Gauthier (aider): 17 + Paul Gauthier: 176 + Paul Gauthier (aider): 11 aider/utils.py: - Paul Gauthier: 7 + Paul Gauthier: 8 tests/test_models.py: Paul Gauthier: 8 grand_total: - Paul Gauthier: 349 - Paul Gauthier (aider): 25 + Paul Gauthier: 356 + Paul Gauthier (aider): 19 start_tag: v0.23.0 - total_lines: 374 -- aider_percentage: 5.79 - aider_total: 7 + total_lines: 375 +- aider_percentage: 6.02 + aider_total: 8 end_date: '2024-03-04' end_tag: v0.25.0 file_counts: @@ -944,7 +946,7 @@ Paul Gauthier: 5 aider/main.py: Paul Gauthier: 4 - Paul Gauthier (aider): 7 + Paul Gauthier (aider): 8 aider/models/openai.py: Paul Gauthier: 1 aider/repo.py: @@ -952,14 +954,14 @@ aider/scrape.py: Paul Gauthier: 1 tests/test_coder.py: - Paul Gauthier: 22 + Paul Gauthier: 28 tests/test_commands.py: - Paul Gauthier: 23 + Paul Gauthier: 28 grand_total: - Paul Gauthier: 114 - Paul Gauthier (aider): 7 + Paul Gauthier: 125 + Paul Gauthier (aider): 8 start_tag: v0.24.0 - total_lines: 121 + total_lines: 133 - aider_percentage: 0.0 aider_total: 0 end_date: '2024-03-08' @@ -970,11 +972,11 @@ aider/coders/base_coder.py: Paul Gauthier: 8 aider/main.py: - Paul Gauthier: 26 + Paul Gauthier: 30 grand_total: - Paul Gauthier: 35 + Paul Gauthier: 39 start_tag: v0.25.0 - total_lines: 35 + total_lines: 39 - aider_percentage: 0.0 aider_total: 0 end_date: '2024-03-22' @@ -987,20 +989,20 @@ aider/main.py: Paul Gauthier: 14 aider/queries/tree-sitter-typescript-tags.scm: - Ryan Freckleton: 21 + Ryan Freckleton: 32 aider/repomap.py: Paul Gauthier: 6 benchmark/benchmark.py: - Paul Gauthier: 91 + Paul Gauthier: 111 tests/test_commands.py: Paul Gauthier: 3 tests/test_repomap.py: - Ryan Freckleton: 48 + Ryan Freckleton: 59 grand_total: - Paul Gauthier: 125 - Ryan Freckleton: 69 + Paul Gauthier: 145 + Ryan Freckleton: 91 start_tag: v0.26.0 - total_lines: 194 + total_lines: 236 - aider_percentage: 0.0 aider_total: 0 end_date: '2024-04-09' @@ -1009,12 +1011,12 @@ aider/__init__.py: Paul Gauthier: 1 aider/models/openai.py: - Paul Gauthier: 3 + Paul Gauthier: 10 grand_total: - Paul Gauthier: 4 + Paul Gauthier: 11 start_tag: v0.27.0 - total_lines: 4 -- aider_percentage: 5.69 + total_lines: 11 +- aider_percentage: 5.47 aider_total: 35 end_date: '2024-04-21' end_tag: v0.29.0 @@ -1041,9 +1043,9 @@ aider/history.py: Paul Gauthier: 6 aider/main.py: - Paul Gauthier: 68 + Paul Gauthier: 81 aider/models.py: - Paul Gauthier: 216 + Paul Gauthier: 219 Paul Gauthier (aider): 33 aider/repo.py: Paul Gauthier: 19 @@ -1065,7 +1067,7 @@ tests/test_models.py: Paul Gauthier: 13 tests/test_repo.py: - Paul Gauthier: 17 + Paul Gauthier: 26 tests/test_repomap.py: Paul Gauthier: 13 tests/test_sendchat.py: @@ -1074,10 +1076,10 @@ Paul Gauthier: 14 grand_total: Aloha: 1 - Paul Gauthier: 579 + Paul Gauthier: 604 Paul Gauthier (aider): 35 start_tag: v0.28.0 - total_lines: 615 + total_lines: 640 - aider_percentage: 0.0 aider_total: 0 end_date: '2024-04-23' @@ -1090,9 +1092,9 @@ aider/history.py: Paul Gauthier: 2 aider/main.py: - Paul Gauthier: 26 + Paul Gauthier: 27 aider/models.py: - Paul Gauthier: 154 + Paul Gauthier: 171 aider/sendchat.py: Paul Gauthier: 3 aider/voice.py: @@ -1114,9 +1116,9 @@ tests/test_wholefile.py: Paul Gauthier: 1 grand_total: - Paul Gauthier: 213 + Paul Gauthier: 231 start_tag: v0.29.0 - total_lines: 213 + total_lines: 231 - aider_percentage: 0.16 aider_total: 2 end_date: '2024-05-02' @@ -1127,7 +1129,7 @@ aider/args.py: Paul Gauthier: 375 aider/coders/base_coder.py: - Paul Gauthier: 120 + Paul Gauthier: 131 aider/commands.py: Paul Gauthier: 45 aider/gui.py: @@ -1144,17 +1146,17 @@ tests/test_coder.py: Paul Gauthier: 16 tests/test_commands.py: - Paul Gauthier: 8 + Paul Gauthier: 10 tests/test_editblock.py: Paul Gauthier: 4 tests/test_wholefile.py: Paul Gauthier: 1 grand_total: - Paul Gauthier: 1247 + Paul Gauthier: 1260 Paul Gauthier (aider): 2 start_tag: v0.30.0 - total_lines: 1249 -- aider_percentage: 3.29 + total_lines: 1262 +- aider_percentage: 3.0 aider_total: 8 end_date: '2024-05-07' end_tag: v0.32.0 @@ -1166,9 +1168,9 @@ aider/coders/__init__.py: Paul Gauthier: 2 aider/coders/base_coder.py: - Paul Gauthier: 54 + Paul Gauthier: 55 aider/coders/editblock_coder.py: - Paul Gauthier: 3 + Paul Gauthier: 4 aider/coders/editblock_fenced_coder.py: Paul Gauthier: 11 aider/gui.py: @@ -1177,25 +1179,25 @@ Paul Gauthier: 5 Paul Gauthier (aider): 3 aider/models.py: - Paul Gauthier: 45 + Paul Gauthier: 54 aider/sendchat.py: Paul Gauthier: 10 aider/utils.py: Paul Gauthier: 1 benchmark/benchmark.py: - Paul Gauthier: 78 + Paul Gauthier: 81 Paul Gauthier (aider): 5 benchmark/plots.py: - Paul Gauthier: 3 + Paul Gauthier: 5 tests/test_main.py: - Paul Gauthier: 10 + Paul Gauthier: 18 tests/test_sendchat.py: Paul Gauthier: 4 grand_total: - Paul Gauthier: 235 + Paul Gauthier: 259 Paul Gauthier (aider): 8 start_tag: v0.31.0 - total_lines: 243 + total_lines: 267 - aider_percentage: 0.0 aider_total: 0 end_date: '2024-05-08' @@ -1212,15 +1214,15 @@ aider/main.py: Paul Gauthier: 1 aider/models.py: - Paul Gauthier: 3 + Paul Gauthier: 9 aider/sendchat.py: Paul Gauthier: 1 aider/voice.py: Paul Gauthier: 2 grand_total: - Paul Gauthier: 21 + Paul Gauthier: 27 start_tag: v0.32.0 - total_lines: 21 + total_lines: 27 - aider_percentage: 0.0 aider_total: 0 end_date: '2024-05-10' @@ -1235,18 +1237,18 @@ aider/main.py: Paul Gauthier: 9 aider/models.py: - Paul Gauthier: 7 + Paul Gauthier: 14 aider/repomap.py: Paul Gauthier: 3 aider/sendchat.py: - Paul Gauthier: 6 + Paul Gauthier: 7 tests/test_sendchat.py: Paul Gauthier: 4 grand_total: - Paul Gauthier: 54 + Paul Gauthier: 62 start_tag: v0.33.0 - total_lines: 54 -- aider_percentage: 6.8 + total_lines: 62 +- aider_percentage: 6.42 aider_total: 17 end_date: '2024-05-13' end_tag: v0.35.0 @@ -1254,36 +1256,36 @@ aider/__init__.py: Paul Gauthier: 1 aider/args.py: - Paul Gauthier: 15 + Paul Gauthier: 18 Paul Gauthier (aider): 5 aider/coders/base_coder.py: Paul Gauthier: 22 Paul Gauthier (aider): 1 aider/coders/editblock_coder.py: - Paul Gauthier: 82 + Paul Gauthier: 84 Paul Gauthier (aider): 10 aider/history.py: Paul Gauthier: 20 aider/io.py: - Paul Gauthier: 7 + Paul Gauthier: 8 aider/main.py: Paul Gauthier: 1 Paul Gauthier (aider): 1 aider/models.py: - Paul Gauthier: 18 + Paul Gauthier: 25 aider/sendchat.py: - Paul Gauthier: 6 + Paul Gauthier: 8 aider/utils.py: Paul Gauthier: 51 aider/versioncheck.py: Paul Gauthier: 10 grand_total: - Paul Gauthier: 233 + Paul Gauthier: 248 Paul Gauthier (aider): 17 start_tag: v0.34.0 - total_lines: 250 -- aider_percentage: 15.38 - aider_total: 92 + total_lines: 265 +- aider_percentage: 14.64 + aider_total: 89 end_date: '2024-05-22' end_tag: v0.36.0 file_counts: @@ -1292,15 +1294,15 @@ aider/__init__.py: Paul Gauthier: 1 aider/args.py: - Paul Gauthier: 37 - Paul Gauthier (aider): 3 + Paul Gauthier: 42 + Paul Gauthier (aider): 1 aider/coders/base_coder.py: - Paul Gauthier: 110 + Paul Gauthier: 113 Paul Gauthier (aider): 3 aider/coders/wholefile_coder.py: Paul Gauthier (aider): 2 aider/commands.py: - Paul Gauthier: 45 + Paul Gauthier: 49 aider/io.py: Paul Gauthier: 9 aider/linter.py: @@ -1319,8 +1321,8 @@ benchmark/benchmark.py: Paul Gauthier: 5 benchmark/over_time.py: - Paul Gauthier: 29 - Paul Gauthier (aider): 28 + Paul Gauthier: 30 + Paul Gauthier (aider): 27 scripts/jekyll_build.sh: Paul Gauthier: 1 Paul Gauthier (aider): 3 @@ -1328,11 +1330,11 @@ Paul Gauthier: 1 Paul Gauthier (aider): 3 grand_total: - Paul Gauthier: 506 - Paul Gauthier (aider): 92 + Paul Gauthier: 519 + Paul Gauthier (aider): 89 start_tag: v0.35.0 - total_lines: 598 -- aider_percentage: 19.06 + total_lines: 608 +- aider_percentage: 18.65 aider_total: 113 end_date: '2024-06-04' end_tag: v0.37.0 @@ -1340,7 +1342,7 @@ aider/__init__.py: Paul Gauthier: 1 aider/coders/base_coder.py: - Paul Gauthier: 71 + Paul Gauthier: 73 Paul Gauthier (aider): 3 aider/coders/editblock_coder.py: Paul Gauthier: 1 @@ -1349,14 +1351,14 @@ Aleksandr Bobrov (aider): 1 Paul Gauthier: 24 aider/io.py: - Paul Gauthier: 6 + Paul Gauthier: 7 Paul Gauthier (aider): 1 aider/linter.py: Paul Gauthier: 4 aider/litellm.py: Paul Gauthier: 1 aider/repomap.py: - Paul Gauthier: 113 + Paul Gauthier: 115 aider/sendchat.py: Paul Gauthier: 2 aider/voice.py: @@ -1364,23 +1366,23 @@ benchmark/over_time.py: Paul Gauthier (aider): 7 benchmark/swe_bench.py: - Paul Gauthier: 99 - Paul Gauthier (aider): 24 + Paul Gauthier: 101 + Paul Gauthier (aider): 30 scripts/blame.py: - Paul Gauthier: 153 - Paul Gauthier (aider): 59 + Paul Gauthier: 159 + Paul Gauthier (aider): 53 tests/test_io.py: Paul Gauthier: 4 Paul Gauthier (aider): 14 grand_total: Aleksandr Bobrov: 1 Aleksandr Bobrov (aider): 1 - Paul Gauthier: 479 + Paul Gauthier: 492 Paul Gauthier (aider): 112 start_tag: v0.36.0 - total_lines: 593 -- aider_percentage: 9.53 - aider_total: 53 + total_lines: 606 +- aider_percentage: 8.96 + aider_total: 50 end_date: '2024-06-16' end_tag: v0.38.0 file_counts: @@ -1399,13 +1401,13 @@ Paul Gauthier: 1 aider/args.py: Krazer: 4 - Paul Gauthier: 57 + Paul Gauthier: 58 develmusa: 1 aider/args_formatter.py: - Paul Gauthier: 116 - Paul Gauthier (aider): 20 + Paul Gauthier: 119 + Paul Gauthier (aider): 17 aider/coders/base_coder.py: - Paul Gauthier: 77 + Paul Gauthier: 78 aider/commands.py: Paul Gauthier: 29 aider/gui.py: @@ -1440,13 +1442,13 @@ Paul Gauthier: 4 grand_total: Krazer: 28 - Paul Gauthier: 474 - Paul Gauthier (aider): 53 + Paul Gauthier: 479 + Paul Gauthier (aider): 50 develmusa: 1 start_tag: v0.37.0 - total_lines: 556 -- aider_percentage: 15.56 - aider_total: 47 + total_lines: 558 +- aider_percentage: 17.1 + aider_total: 59 end_date: '2024-06-20' end_tag: v0.39.0 file_counts: @@ -1456,13 +1458,13 @@ Paul Gauthier (aider): 4 aider/args.py: Daniel Vainsencher: 6 - John-Mason P. Shackelford: 14 - Paul Gauthier: 14 + John-Mason P. Shackelford: 18 + Paul Gauthier: 23 aider/args_formatter.py: Paul Gauthier: 24 - Paul Gauthier (aider): 9 + Paul Gauthier (aider): 15 aider/coders/base_coder.py: - Daniel Vainsencher: 4 + Daniel Vainsencher: 5 Daniel Vainsencher (aider): 2 Paul Gauthier: 2 aider/commands.py: @@ -1473,7 +1475,7 @@ Daniel Vainsencher: 1 John-Mason P. Shackelford: 14 aider/models.py: - Paul Gauthier: 14 + Paul Gauthier: 18 aider/repo.py: Paul Gauthier: 23 aider/scrape.py: @@ -1481,29 +1483,29 @@ aider/tests/test_commands.py: Paul Gauthier: 6 aider/tests/test_main.py: - John-Mason P. Shackelford: 80 + John-Mason P. Shackelford: 88 aider/tests/test_repo.py: - Paul Gauthier: 19 - Paul Gauthier (aider): 21 + Paul Gauthier: 24 + Paul Gauthier (aider): 24 aider/urls.py: Nicolas Perez: 1 Paul Gauthier: 1 aider/utils.py: Daniel Vainsencher: 7 - Daniel Vainsencher (aider): 11 + Daniel Vainsencher (aider): 14 John-Mason P. Shackelford: 7 scripts/update-docs.sh: Paul Gauthier: 1 grand_total: - Daniel Vainsencher: 32 - Daniel Vainsencher (aider): 13 - John-Mason P. Shackelford: 115 + Daniel Vainsencher: 33 + Daniel Vainsencher (aider): 16 + John-Mason P. Shackelford: 127 Nicolas Perez: 2 - Paul Gauthier: 106 - Paul Gauthier (aider): 34 + Paul Gauthier: 124 + Paul Gauthier (aider): 43 start_tag: v0.38.0 - total_lines: 302 -- aider_percentage: 6.42 + total_lines: 345 +- aider_percentage: 5.82 aider_total: 21 end_date: '2024-06-24' end_tag: v0.40.0 @@ -1512,34 +1514,34 @@ Paul Gauthier: 1 aider/args.py: Krazer: 6 - Paul Gauthier: 27 + Paul Gauthier: 33 aider/coders/base_coder.py: Paul Gauthier: 28 aider/coders/editblock_coder.py: Paul Gauthier: 64 aider/linter.py: - Paul Gauthier: 23 + Paul Gauthier: 24 Paul Gauthier (aider): 21 aider/main.py: - Krazer: 32 + Krazer: 36 Paul Gauthier: 23 aider/models.py: - Dustin Miller: 13 + Dustin Miller: 14 Krazer: 31 - Paul Gauthier: 16 + Paul Gauthier: 28 aider/repo.py: Paul Gauthier: 26 aider/tests/test_editblock.py: - Paul Gauthier: 16 + Paul Gauthier: 26 grand_total: - Dustin Miller: 13 - Krazer: 69 - Paul Gauthier: 224 + Dustin Miller: 14 + Krazer: 73 + Paul Gauthier: 253 Paul Gauthier (aider): 21 start_tag: v0.39.0 - total_lines: 327 -- aider_percentage: 4.74 - aider_total: 11 + total_lines: 361 +- aider_percentage: 5.86 + aider_total: 15 end_date: '2024-07-01' end_tag: v0.41.0 file_counts: @@ -1548,26 +1550,26 @@ aider/__init__.py: Paul Gauthier: 1 aider/args.py: - Paul Gauthier: 5 - Paul Gauthier (aider): 5 + Paul Gauthier: 10 + Paul Gauthier (aider): 6 aider/coders/base_coder.py: - Paul Gauthier: 122 + Paul Gauthier: 125 Paul Gauthier (aider): 2 aider/coders/wholefile_coder.py: - Paul Gauthier: 2 + Paul Gauthier: 3 aider/commands.py: - Amir Elaguizy (aider): 3 + Amir Elaguizy (aider): 6 Paul Gauthier: 1 aider/gui.py: Paul Gauthier: 4 aider/main.py: - Paul Gauthier: 10 + Paul Gauthier: 11 Paul Gauthier (aider): 1 aider/mdstream.py: Paul Gauthier: 1 aider/models.py: Mitsuki Ogasahara: 3 - Paul Gauthier: 28 + Paul Gauthier: 38 aider/repo.py: Paul Gauthier: 7 aider/repomap.py: @@ -1585,12 +1587,12 @@ setup.py: Paul Gauthier: 3 grand_total: - Amir Elaguizy (aider): 3 + Amir Elaguizy (aider): 6 Mitsuki Ogasahara: 3 - Paul Gauthier: 218 - Paul Gauthier (aider): 8 + Paul Gauthier: 238 + Paul Gauthier (aider): 9 start_tag: v0.40.0 - total_lines: 232 + total_lines: 256 - aider_percentage: 2.29 aider_total: 7 end_date: '2024-07-04' @@ -1636,8 +1638,8 @@ Paul Gauthier (aider): 7 start_tag: v0.41.0 total_lines: 306 -- aider_percentage: 10.61 - aider_total: 40 +- aider_percentage: 9.82 + aider_total: 38 end_date: '2024-07-07' end_tag: v0.43.0 file_counts: @@ -1658,11 +1660,11 @@ aider/coders/__init__.py: Paul Gauthier: 2 aider/coders/base_coder.py: - Paul Gauthier: 44 + Paul Gauthier: 45 aider/coders/help_coder.py: - Paul Gauthier: 15 + Paul Gauthier: 17 aider/commands.py: - Paul Gauthier: 63 + Paul Gauthier: 69 Paul Gauthier (aider): 5 aider/help.py: Paul Gauthier: 114 @@ -1672,14 +1674,14 @@ aider/llm.py: Paul Gauthier: 1 aider/main.py: - Paul Gauthier: 35 + Paul Gauthier: 36 aider/repomap.py: Paul Gauthier: 14 aider/tests/test_commands.py: Paul Gauthier: 1 aider/tests/test_help.py: - Paul Gauthier: 5 - Paul Gauthier (aider): 26 + Paul Gauthier: 7 + Paul Gauthier (aider): 24 aider/versioncheck.py: Paul Gauthier: 2 scripts/jekyll_run.sh: @@ -1690,12 +1692,12 @@ Paul Gauthier: 6 Paul Gauthier (aider): 3 grand_total: - Paul Gauthier: 337 - Paul Gauthier (aider): 40 + Paul Gauthier: 349 + Paul Gauthier (aider): 38 start_tag: v0.42.0 - total_lines: 377 -- aider_percentage: 27.02 - aider_total: 157 + total_lines: 387 +- aider_percentage: 27.04 + aider_total: 159 end_date: '2024-07-16' end_tag: v0.44.0 file_counts: @@ -1706,7 +1708,7 @@ aider/__init__.py: Paul Gauthier: 1 aider/args.py: - Paul Gauthier: 4 + Paul Gauthier: 5 aider/args_formatter.py: Paul Gauthier: 1 aider/coders/base_coder.py: @@ -1719,16 +1721,16 @@ aider/help.py: Paul Gauthier: 20 aider/main.py: - Paul Gauthier: 20 + Paul Gauthier: 22 aider/models.py: Paul Gauthier: 11 aider/scrape.py: - Paul Gauthier: 53 + Paul Gauthier: 54 aider/utils.py: Paul Gauthier: 78 Paul Gauthier (aider): 16 aider/versioncheck.py: - Paul Gauthier: 27 + Paul Gauthier: 28 aider/voice.py: Paul Gauthier: 6 benchmark/Dockerfile: @@ -1751,19 +1753,19 @@ Paul Gauthier (aider): 37 tests/browser/test_browser.py: Paul Gauthier: 13 - Paul Gauthier (aider): 16 + Paul Gauthier (aider): 18 tests/help/test_help.py: Paul Gauthier: 23 tests/scrape/test_scrape.py: Paul Gauthier: 16 Paul Gauthier (aider): 26 grand_total: - Paul Gauthier: 424 - Paul Gauthier (aider): 157 + Paul Gauthier: 429 + Paul Gauthier (aider): 159 start_tag: v0.43.0 - total_lines: 581 -- aider_percentage: 44.93 - aider_total: 93 + total_lines: 588 +- aider_percentage: 48.43 + aider_total: 123 end_date: '2024-07-18' end_tag: v0.45.0 file_counts: @@ -1779,29 +1781,29 @@ Paul Gauthier: 1 Paul Gauthier (aider): 5 aider/models.py: - Paul Gauthier: 7 + Paul Gauthier: 16 aider/repomap.py: Paul Gauthier: 1 aider/scrape.py: - Paul Gauthier: 8 + Paul Gauthier: 9 aider/versioncheck.py: Paul Gauthier: 14 tests/basic/test_coder.py: Paul Gauthier: 15 - Paul Gauthier (aider): 21 + Paul Gauthier (aider): 25 tests/basic/test_commands.py: - Paul Gauthier: 15 - Paul Gauthier (aider): 55 + Paul Gauthier: 22 + Paul Gauthier (aider): 81 tests/basic/test_main.py: Paul Gauthier: 27 Paul Gauthier (aider): 5 grand_total: - Paul Gauthier: 114 - Paul Gauthier (aider): 93 + Paul Gauthier: 131 + Paul Gauthier (aider): 123 start_tag: v0.44.0 - total_lines: 207 -- aider_percentage: 52.87 - aider_total: 313 + total_lines: 254 +- aider_percentage: 53.3 + aider_total: 339 end_date: '2024-07-29' end_tag: v0.46.0 file_counts: @@ -1816,7 +1818,7 @@ Your Name: 9 aider/coders/base_coder.py: Paul Gauthier: 17 - Paul Gauthier (aider): 43 + Paul Gauthier (aider): 45 Your Name: 27 Your Name (aider): 6 aider/coders/editblock_coder.py: @@ -1832,19 +1834,19 @@ Your Name (aider): 2 aider/commands.py: Paul Gauthier: 43 - Your Name: 26 - Your Name (aider): 25 + Your Name: 28 + Your Name (aider): 34 aider/io.py: Paul Gauthier: 3 aider/llm.py: - Paul Gauthier: 10 + Paul Gauthier: 11 aider/main.py: Paul Gauthier: 3 Paul Gauthier (aider): 8 Your Name: 6 Your Name (aider): 1 aider/models.py: - Paul Gauthier: 9 + Paul Gauthier: 24 aider/queries/tree-sitter-elm-tags.scm: Charles Joachim: 4 aider/repomap.py: @@ -1864,37 +1866,37 @@ Paul Gauthier (aider): 13 tests/basic/test_repomap.py: Paul Gauthier: 70 - Paul Gauthier (aider): 10 + Paul Gauthier (aider): 25 tests/scrape/test_scrape.py: Paul Gauthier: 14 Paul Gauthier (aider): 73 grand_total: Charles Joachim: 4 - Paul Gauthier: 204 - Paul Gauthier (aider): 272 - Your Name: 71 - Your Name (aider): 41 + Paul Gauthier: 220 + Paul Gauthier (aider): 289 + Your Name: 73 + Your Name (aider): 50 start_tag: v0.45.0 - total_lines: 592 -- aider_percentage: 56.98 - aider_total: 355 + total_lines: 636 +- aider_percentage: 58.42 + aider_total: 392 end_date: '2024-07-31' end_tag: v0.47.0 file_counts: .github/workflows/docker-release.yml: - Paul Gauthier (aider): 20 + Paul Gauthier (aider): 35 .github/workflows/release.yml: Paul Gauthier (aider): 2 aider/__init__.py: Paul Gauthier: 1 aider/args.py: - Paul Gauthier: 4 + Paul Gauthier: 6 Paul Gauthier (aider): 5 aider/coders/base_coder.py: Paul Gauthier: 8 Paul Gauthier (aider): 3 aider/commands.py: - Paul Gauthier: 20 + Paul Gauthier: 23 Paul Gauthier (aider): 4 aider/history.py: Paul Gauthier: 16 @@ -1906,7 +1908,7 @@ Paul Gauthier: 14 Paul Gauthier (aider): 1 aider/main.py: - Paul Gauthier: 3 + Paul Gauthier: 9 Paul Gauthier (aider): 1 aider/queries/tree-sitter-ocaml-tags.scm: Paul Gauthier: 12 @@ -1927,34 +1929,34 @@ Paul Gauthier (aider): 12 docker/Dockerfile: Paul Gauthier: 19 - Paul Gauthier (aider): 18 + Paul Gauthier (aider): 21 scripts/blame.py: - Paul Gauthier: 65 - Paul Gauthier (aider): 99 + Paul Gauthier: 64 + Paul Gauthier (aider): 110 scripts/update-blame.sh: Paul Gauthier: 6 scripts/update-docs.sh: Paul Gauthier: 1 tests/basic/test_coder.py: - Paul Gauthier: 32 + Paul Gauthier: 33 Paul Gauthier (aider): 4 tests/basic/test_commands.py: Paul Gauthier: 11 - Paul Gauthier (aider): 25 + Paul Gauthier (aider): 30 tests/basic/test_history.py: Paul Gauthier (aider): 109 tests/basic/test_repo.py: Paul Gauthier: 4 - Paul Gauthier (aider): 9 + Paul Gauthier (aider): 12 tests/basic/test_repomap.py: Paul Gauthier: 1 grand_total: - Paul Gauthier: 268 - Paul Gauthier (aider): 355 + Paul Gauthier: 279 + Paul Gauthier (aider): 392 start_tag: v0.46.0 - total_lines: 623 -- aider_percentage: 45.67 - aider_total: 269 + total_lines: 671 +- aider_percentage: 45.1 + aider_total: 276 end_date: '2024-08-06' end_tag: v0.48.0 file_counts: @@ -1974,7 +1976,7 @@ aider/history.py: Paul Gauthier: 2 aider/main.py: - Paul Gauthier: 20 + Paul Gauthier: 21 Paul Gauthier (aider): 30 aider/models.py: Paul Gauthier: 9 @@ -1984,8 +1986,8 @@ Paul Gauthier: 42 Paul Gauthier (aider): 23 aider/repomap.py: - Paul Gauthier: 60 - Paul Gauthier (aider): 3 + Paul Gauthier: 62 + Paul Gauthier (aider): 2 aider/sendchat.py: Paul Gauthier: 26 Paul Gauthier (aider): 2 @@ -1995,71 +1997,71 @@ scripts/blame.py: Paul Gauthier (aider): 2 tests/basic/test_coder.py: - Paul Gauthier: 10 + Paul Gauthier: 13 tests/basic/test_commands.py: Paul Gauthier: 19 - Paul Gauthier (aider): 14 + Paul Gauthier (aider): 18 tests/basic/test_history.py: Paul Gauthier: 2 tests/basic/test_main.py: - Paul Gauthier: 15 - Paul Gauthier (aider): 39 + Paul Gauthier: 25 + Paul Gauthier (aider): 42 tests/basic/test_repo.py: Paul Gauthier: 8 - Paul Gauthier (aider): 35 + Paul Gauthier (aider): 36 tests/basic/test_scripting.py: Paul Gauthier (aider): 39 grand_total: - Paul Gauthier: 318 - Paul Gauthier (aider): 269 + Paul Gauthier: 334 + Paul Gauthier (aider): 276 Thinh Nguyen: 1 paul-gauthier: 1 start_tag: v0.47.0 - total_lines: 589 -- aider_percentage: 59.83 - aider_total: 429 + total_lines: 612 +- aider_percentage: 59.65 + aider_total: 473 end_date: '2024-08-10' end_tag: v0.49.0 file_counts: aider/__init__.py: Paul Gauthier: 1 aider/args.py: - Paul Gauthier: 7 - Paul Gauthier (aider): 9 + Paul Gauthier: 9 + Paul Gauthier (aider): 13 aider/coders/base_coder.py: - Paul Gauthier: 81 - Paul Gauthier (aider): 41 + Paul Gauthier: 91 + Paul Gauthier (aider): 44 aider/commands.py: Paul Gauthier: 34 - Paul Gauthier (aider): 105 + Paul Gauthier (aider): 108 aider/io.py: Paul Gauthier: 7 - Paul Gauthier (aider): 23 + Paul Gauthier (aider): 24 aider/llm.py: Paul Gauthier (aider): 5 aider/main.py: Paul Gauthier: 1 Paul Gauthier (aider): 4 aider/models.py: - Paul Gauthier: 17 + Paul Gauthier: 34 Paul Gauthier (aider): 3 aider/repo.py: Paul Gauthier: 8 - Paul Gauthier (aider): 12 + Paul Gauthier (aider): 13 aider/repomap.py: Paul Gauthier: 11 Paul Gauthier (aider): 23 aider/scrape.py: Paul Gauthier (aider): 17 aider/sendchat.py: - Paul Gauthier: 20 + Paul Gauthier: 21 aider/urls.py: Paul Gauthier: 1 aider/utils.py: Paul Gauthier (aider): 11 aider/versioncheck.py: Paul Gauthier: 3 - Paul Gauthier (aider): 9 + Paul Gauthier (aider): 11 aider/website/docs/leaderboards/index.md: Paul Gauthier: 11 Paul Gauthier (aider): 11 @@ -2067,28 +2069,28 @@ Paul Gauthier: 5 Paul Gauthier (aider): 2 tests/basic/test_coder.py: - Paul Gauthier (aider): 5 + Paul Gauthier (aider): 7 tests/basic/test_commands.py: Paul Gauthier: 35 - Paul Gauthier (aider): 83 + Paul Gauthier (aider): 93 tests/basic/test_editblock.py: Paul Gauthier (aider): 1 tests/basic/test_main.py: - Paul Gauthier (aider): 28 + Paul Gauthier (aider): 33 tests/basic/test_sendchat.py: - Paul Gauthier: 45 + Paul Gauthier: 47 tests/basic/test_wholefile.py: Paul Gauthier (aider): 1 tests/scrape/test_scrape.py: Paul Gauthier: 1 - Paul Gauthier (aider): 36 + Paul Gauthier (aider): 49 grand_total: - Paul Gauthier: 288 - Paul Gauthier (aider): 429 + Paul Gauthier: 320 + Paul Gauthier (aider): 473 start_tag: v0.48.0 - total_lines: 717 -- aider_percentage: 65.23 - aider_total: 182 + total_lines: 793 +- aider_percentage: 65.52 + aider_total: 209 end_date: '2024-08-13' end_tag: v0.50.0 file_counts: @@ -2097,14 +2099,14 @@ aider/__init__.py: Paul Gauthier: 1 aider/args.py: - Paul Gauthier (aider): 8 + Paul Gauthier (aider): 10 aider/coders/base_coder.py: Paul Gauthier: 24 - Paul Gauthier (aider): 30 + Paul Gauthier (aider): 32 aider/commands.py: - Amir Elaguizy (aider): 11 - Paul Gauthier: 26 - Paul Gauthier (aider): 15 + Amir Elaguizy (aider): 13 + Paul Gauthier: 28 + Paul Gauthier (aider): 18 aider/io.py: Paul Gauthier: 1 aider/main.py: @@ -2127,24 +2129,24 @@ Paul Gauthier (aider): 34 tests/basic/test_coder.py: Paul Gauthier: 3 - Paul Gauthier (aider): 16 + Paul Gauthier (aider): 19 tests/basic/test_commands.py: - Paul Gauthier: 7 - Paul Gauthier (aider): 27 + Paul Gauthier: 18 + Paul Gauthier (aider): 41 tests/basic/test_main.py: Paul Gauthier: 1 - Paul Gauthier (aider): 7 + Paul Gauthier (aider): 8 tests/help/test_help.py: Paul Gauthier: 7 grand_total: - Amir Elaguizy (aider): 11 + Amir Elaguizy (aider): 13 Branch Vincent: 2 - Paul Gauthier: 95 - Paul Gauthier (aider): 171 + Paul Gauthier: 108 + Paul Gauthier (aider): 196 start_tag: v0.49.0 - total_lines: 279 -- aider_percentage: 56.95 - aider_total: 582 + total_lines: 319 +- aider_percentage: 62.86 + aider_total: 689 end_date: '2024-08-20' end_tag: v0.51.0 file_counts: @@ -2152,14 +2154,14 @@ Paul Gauthier: 1 aider/args.py: Paul Gauthier: 2 - Paul Gauthier (aider): 8 + Paul Gauthier (aider): 10 aider/coders/__init__.py: - Paul Gauthier: 3 + Paul Gauthier: 4 aider/coders/base_coder.py: - Paul Gauthier: 168 - Paul Gauthier (aider): 45 + Paul Gauthier: 172 + Paul Gauthier (aider): 51 aider/coders/single_wholefile_func_coder.py: - Paul Gauthier: 28 + Paul Gauthier: 29 aider/commands.py: Paul Gauthier: 3 Paul Gauthier (aider): 5 @@ -2167,23 +2169,23 @@ Paul Gauthier: 2 aider/main.py: Paul Gauthier: 6 - Paul Gauthier (aider): 13 + Paul Gauthier (aider): 16 aider/models.py: - Paul Gauthier: 35 - Paul Gauthier (aider): 4 + Paul Gauthier: 45 + Paul Gauthier (aider): 2 aider/repomap.py: - Paul Gauthier: 11 - Paul Gauthier (aider): 55 + Paul Gauthier: 16 + Paul Gauthier (aider): 58 aider/sendchat.py: Paul Gauthier: 3 aider/utils.py: Paul Gauthier (aider): 6 aider/website/_includes/code-in-json-benchmark.js: - Paul Gauthier: 101 - Paul Gauthier (aider): 64 + Paul Gauthier: 24 + Paul Gauthier (aider): 141 aider/website/_includes/code-in-json-syntax.js: - Paul Gauthier: 23 - Paul Gauthier (aider): 116 + Paul Gauthier: 42 + Paul Gauthier (aider): 97 aider/website/docs/leaderboards/index.md: Paul Gauthier: 1 benchmark/benchmark.py: @@ -2198,18 +2200,18 @@ tests/basic/test_commands.py: Paul Gauthier: 5 tests/basic/test_main.py: - Paul Gauthier: 4 - Paul Gauthier (aider): 92 + Paul Gauthier: 6 + Paul Gauthier (aider): 125 tests/basic/test_repomap.py: - Paul Gauthier: 13 - Paul Gauthier (aider): 100 + Paul Gauthier: 15 + Paul Gauthier (aider): 104 grand_total: - Paul Gauthier: 440 - Paul Gauthier (aider): 582 + Paul Gauthier: 407 + Paul Gauthier (aider): 689 start_tag: v0.50.0 - total_lines: 1022 -- aider_percentage: 67.74 - aider_total: 485 + total_lines: 1096 +- aider_percentage: 66.9 + aider_total: 479 end_date: '2024-08-23' end_tag: v0.52.0 file_counts: @@ -2219,22 +2221,23 @@ Paul Gauthier: 2 Paul Gauthier (aider): 6 aider/coders/base_coder.py: - Paul Gauthier: 77 - Paul Gauthier (aider): 25 + Paul Gauthier: 80 + Paul Gauthier (aider): 23 aider/coders/chat_chunks.py: - Paul Gauthier (aider): 53 + Paul Gauthier: 1 + Paul Gauthier (aider): 3 aider/coders/editblock_coder.py: - Paul Gauthier: 42 - Paul Gauthier (aider): 67 + Paul Gauthier: 45 + Paul Gauthier (aider): 68 aider/coders/wholefile_coder.py: Paul Gauthier: 1 aider/commands.py: Paul Gauthier: 5 - Paul Gauthier (aider): 40 + Paul Gauthier (aider): 42 pcamp: 1 aider/io.py: - Paul Gauthier: 41 - Paul Gauthier (aider): 40 + Paul Gauthier: 40 + Paul Gauthier (aider): 41 aider/main.py: Paul Gauthier: 2 aider/models.py: @@ -2254,7 +2257,7 @@ scripts/blame.py: Paul Gauthier: 1 tests/basic/test_commands.py: - Paul Gauthier (aider): 74 + Paul Gauthier (aider): 100 tests/basic/test_editblock.py: Paul Gauthier (aider): 1 tests/basic/test_find_or_blocks.py: @@ -2264,17 +2267,17 @@ Paul Gauthier (aider): 32 tests/basic/test_main.py: Paul Gauthier: 2 - Paul Gauthier (aider): 27 + Paul Gauthier (aider): 43 tests/basic/test_wholefile.py: Paul Gauthier: 8 grand_total: - Paul Gauthier: 230 - Paul Gauthier (aider): 485 + Paul Gauthier: 236 + Paul Gauthier (aider): 479 pcamp: 1 start_tag: v0.51.0 total_lines: 716 -- aider_percentage: 62.36 - aider_total: 434 +- aider_percentage: 62.33 + aider_total: 455 end_date: '2024-08-27' end_tag: v0.53.0 file_counts: @@ -2284,7 +2287,7 @@ Paul Gauthier: 2 Paul Gauthier (aider): 10 aider/coders/base_coder.py: - Paul Gauthier: 55 + Paul Gauthier: 57 Paul Gauthier (aider): 18 aider/coders/chat_chunks.py: Paul Gauthier (aider): 9 @@ -2292,7 +2295,7 @@ Paul Gauthier: 44 Paul Gauthier (aider): 6 aider/commands.py: - Paul Gauthier: 18 + Paul Gauthier: 19 aider/history.py: Paul Gauthier (aider): 3 aider/io.py: @@ -2313,7 +2316,7 @@ Paul Gauthier: 7 Paul Gauthier (aider): 11 aider/utils.py: - Paul Gauthier: 9 + Paul Gauthier: 12 Paul Gauthier (aider): 9 aider/versioncheck.py: Paul Gauthier: 2 @@ -2321,13 +2324,13 @@ scripts/versionbump.py: Paul Gauthier: 1 tests/basic/test_commands.py: - Paul Gauthier: 6 + Paul Gauthier: 12 tests/basic/test_editblock.py: - Paul Gauthier: 5 - Paul Gauthier (aider): 27 + Paul Gauthier: 6 + Paul Gauthier (aider): 26 tests/basic/test_io.py: Paul Gauthier: 2 - Paul Gauthier (aider): 44 + Paul Gauthier (aider): 66 tests/basic/test_main.py: Paul Gauthier: 2 tests/basic/test_models.py: @@ -2344,12 +2347,12 @@ tests/fixtures/sample-code-base/sample.py: Paul Gauthier (aider): 68 grand_total: - Paul Gauthier: 262 - Paul Gauthier (aider): 434 + Paul Gauthier: 275 + Paul Gauthier (aider): 455 start_tag: v0.52.0 - total_lines: 696 -- aider_percentage: 67.4 - aider_total: 184 + total_lines: 730 +- aider_percentage: 70.0 + aider_total: 224 end_date: '2024-08-28' end_tag: v0.54.0 file_counts: @@ -2363,7 +2366,7 @@ Paul Gauthier: 1 aider/args.py: Paul Gauthier: 1 - Paul Gauthier (aider): 10 + Paul Gauthier (aider): 12 aider/coders/base_coder.py: Paul Gauthier: 25 Paul Gauthier (aider): 12 @@ -2374,37 +2377,37 @@ Paul Gauthier: 28 aider/main.py: Paul Gauthier: 2 - Paul Gauthier (aider): 4 + Paul Gauthier (aider): 6 aider/models.py: - Paul Gauthier (aider): 7 + Paul Gauthier (aider): 11 aider/run_cmd.py: - Paul Gauthier: 3 - Paul Gauthier (aider): 66 + Paul Gauthier: 2 + Paul Gauthier (aider): 70 aider/utils.py: - Paul Gauthier (aider): 14 + Paul Gauthier (aider): 15 aider/versioncheck.py: Paul Gauthier: 1 - Paul Gauthier (aider): 9 + Paul Gauthier (aider): 13 aider/website/docs/leaderboards/index.md: Paul Gauthier: 1 tests/basic/test_coder.py: - Paul Gauthier: 6 - Paul Gauthier (aider): 43 + Paul Gauthier: 14 + Paul Gauthier (aider): 49 tests/basic/test_io.py: Paul Gauthier: 4 tests/basic/test_main.py: Antti Kaihola: 4 - Paul Gauthier (aider): 12 + Paul Gauthier (aider): 29 tests/scrape/test_scrape.py: Paul Gauthier: 1 grand_total: Antti Kaihola: 4 - Paul Gauthier: 85 - Paul Gauthier (aider): 184 + Paul Gauthier: 92 + Paul Gauthier (aider): 224 start_tag: v0.53.0 - total_lines: 273 -- aider_percentage: 52.82 - aider_total: 759 + total_lines: 320 +- aider_percentage: 52.4 + aider_total: 787 end_date: '2024-09-04' end_tag: v0.55.0 file_counts: @@ -2414,8 +2417,8 @@ aider/args.py: Paul Gauthier (aider): 7 aider/coders/base_coder.py: - Paul Gauthier: 62 - Paul Gauthier (aider): 39 + Paul Gauthier: 63 + Paul Gauthier (aider): 42 aider/coders/editblock_coder.py: Nikolay Sedelnikov: 8 aider/coders/editblock_func_coder.py: @@ -2426,15 +2429,15 @@ Paul Gauthier: 16 aider/commands.py: Antti Kaihola: 7 - Paul Gauthier: 74 - Paul Gauthier (aider): 25 + Paul Gauthier: 83 + Paul Gauthier (aider): 27 aider/format_settings.py: Paul Gauthier (aider): 2 aider/gui.py: Paul Gauthier: 4 aider/io.py: - Paul Gauthier: 56 - Paul Gauthier (aider): 11 + Paul Gauthier: 57 + Paul Gauthier (aider): 13 aider/linter.py: Paul Gauthier: 5 aider/llm.py: @@ -2468,7 +2471,7 @@ Paul Gauthier: 31 Paul Gauthier (aider): 29 aider/versioncheck.py: - Paul Gauthier: 22 + Paul Gauthier: 32 Paul Gauthier (aider): 6 aider/voice.py: Paul Gauthier: 7 @@ -2476,23 +2479,23 @@ aider/website/docs/leaderboards/index.md: Paul Gauthier: 1 scripts/versionbump.py: - Paul Gauthier: 7 + Paul Gauthier: 9 tests/basic/test_coder.py: Paul Gauthier: 3 - Paul Gauthier (aider): 96 + Paul Gauthier (aider): 105 tests/basic/test_editblock.py: Antti Kaihola: 3 - Nikolay Sedelnikov: 23 + Nikolay Sedelnikov: 37 tests/basic/test_io.py: Paul Gauthier: 2 - Paul Gauthier (aider): 14 + Paul Gauthier (aider): 15 tests/basic/test_main.py: Paul Gauthier: 2 Paul Gauthier (aider): 10 tests/basic/test_models.py: Paul Gauthier (aider): 4 tests/basic/test_repomap.py: - Paul Gauthier (aider): 31 + Paul Gauthier (aider): 42 tests/basic/test_run_cmd.py: Paul Gauthier (aider): 11 tests/basic/test_special.py: @@ -2502,13 +2505,13 @@ Paul Gauthier (aider): 11 grand_total: Antti Kaihola: 12 - Nikolay Sedelnikov: 31 - Paul Gauthier: 635 - Paul Gauthier (aider): 759 + Nikolay Sedelnikov: 45 + Paul Gauthier: 658 + Paul Gauthier (aider): 787 start_tag: v0.54.0 - total_lines: 1437 -- aider_percentage: 56.23 - aider_total: 149 + total_lines: 1502 +- aider_percentage: 55.4 + aider_total: 154 end_date: '2024-09-09' end_tag: v0.56.0 file_counts: @@ -2528,15 +2531,15 @@ aider/linter.py: Paul Gauthier: 6 Paul Gauthier (aider): 4 - fry69: 9 + fry69: 12 aider/main.py: - Paul Gauthier: 32 - Paul Gauthier (aider): 49 + Paul Gauthier: 35 + Paul Gauthier (aider): 48 aider/models.py: Paul Gauthier: 2 fry69: 3 aider/repo.py: - Paul Gauthier: 14 + Paul Gauthier: 16 aider/repomap.py: Paul Gauthier: 13 aider/report.py: @@ -2551,15 +2554,15 @@ Paul Gauthier (aider): 51 tests/basic/test_main.py: Paul Gauthier: 2 - Paul Gauthier (aider): 3 + Paul Gauthier (aider): 9 grand_total: - Paul Gauthier: 104 - Paul Gauthier (aider): 149 - fry69: 12 + Paul Gauthier: 109 + Paul Gauthier (aider): 154 + fry69: 15 start_tag: v0.55.0 - total_lines: 265 -- aider_percentage: 70.27 - aider_total: 390 + total_lines: 278 +- aider_percentage: 70.36 + aider_total: 406 end_date: '2024-09-21' end_tag: v0.57.0 file_counts: @@ -2570,10 +2573,10 @@ Paul Gauthier (aider): 1 aider/coders/base_coder.py: Krazer: 1 - Paul Gauthier: 14 + Paul Gauthier: 17 Paul Gauthier (aider): 2 aider/coders/chat_chunks.py: - Paul Gauthier: 4 + Paul Gauthier: 5 aider/coders/editblock_coder.py: Paul Gauthier (aider): 27 aider/commands.py: @@ -2581,21 +2584,22 @@ Paul Gauthier: 1 Paul Gauthier (aider): 34 aider/io.py: - Krazer: 23 + Krazer: 27 Paul Gauthier: 8 Paul Gauthier (aider): 42 aider/main.py: + Krazer: 2 Paul Gauthier: 5 Paul Gauthier (aider): 8 aider/models.py: Jay Alammar: 1 Jay Alammar (aider): 13 - Paul Gauthier: 48 - Paul Gauthier (aider): 30 + Paul Gauthier: 43 + Paul Gauthier (aider): 46 aider/repo.py: Paul Gauthier: 3 aider/run_cmd.py: - Paul Gauthier: 7 + Paul Gauthier: 8 Paul Gauthier (aider): 33 aider/sendchat.py: Paul Gauthier: 3 @@ -2626,35 +2630,37 @@ Christian Clauss: 2 Jay Alammar: 1 Jay Alammar (aider): 13 - Krazer: 27 + Krazer: 33 Paul Gauthier: 134 - Paul Gauthier (aider): 377 + Paul Gauthier (aider): 393 start_tag: v0.56.0 - total_lines: 555 -- aider_percentage: 44.68 - aider_total: 600 + total_lines: 577 +- aider_percentage: 48.74 + aider_total: 658 end_date: '2024-09-29' end_tag: v0.58.0 file_counts: .github/workflows/docker-build-test.yml: Paul Gauthier: 1 - Paul Gauthier (aider): 5 + Paul Gauthier (aider): 11 aider/__init__.py: Paul Gauthier: 1 aider/args.py: Mike Bailey: 7 Paul Gauthier: 8 - Paul Gauthier (aider): 51 + Paul Gauthier (aider): 55 Stein Martin Hustad: 17 fry69: 2 aider/coders/__init__.py: Paul Gauthier: 6 + Paul Gauthier (aider): 2 aider/coders/architect_coder.py: Paul Gauthier: 40 Paul Gauthier (aider): 3 aider/coders/base_coder.py: + Jonathan Ellis: 1 Paul Gauthier: 32 - Paul Gauthier (aider): 4 + Paul Gauthier (aider): 8 aider/coders/editor_editblock_coder.py: Paul Gauthier: 6 Paul Gauthier (aider): 1 @@ -2665,8 +2671,8 @@ aider/commands.py: Jonathan Ellis: 1 Mike Bailey: 1 - Paul Gauthier: 17 - Paul Gauthier (aider): 77 + Paul Gauthier: 15 + Paul Gauthier (aider): 78 fry69: 2 aider/help.py: Paul Gauthier: 27 @@ -2674,12 +2680,12 @@ aider/history.py: Paul Gauthier: 1 aider/io.py: - Paul Gauthier: 38 + Paul Gauthier: 39 Paul Gauthier (aider): 62 Stein Martin Hustad: 5 - fry69: 9 + fry69: 10 aider/linter.py: - Paul Gauthier: 5 + Paul Gauthier: 6 aider/main.py: Paul Gauthier: 13 Paul Gauthier (aider): 6 @@ -2688,7 +2694,7 @@ rti: 1 aider/models.py: Paul Gauthier: 58 - Paul Gauthier (aider): 79 + Paul Gauthier (aider): 85 aider/repo.py: Paul Gauthier: 16 Paul Gauthier (aider): 2 @@ -2706,26 +2712,26 @@ aider/voice.py: Mike Bailey: 17 Paul Gauthier: 2 - Paul Gauthier (aider): 6 + Paul Gauthier (aider): 10 aider/website/docs/leaderboards/index.md: - Paul Gauthier: 152 + Paul Gauthier: 92 benchmark/benchmark.py: Paul Gauthier: 25 Paul Gauthier (aider): 29 fry69: 3 scripts/issues.py: Paul Gauthier: 5 - Paul Gauthier (aider): 43 + Paul Gauthier (aider): 45 scripts/update-docs.sh: Paul Gauthier: 1 scripts/yank-old-versions.py: Paul Gauthier (aider): 51 tests/basic/test_commands.py: Paul Gauthier: 2 - Paul Gauthier (aider): 82 + Paul Gauthier (aider): 98 tests/basic/test_io.py: Paul Gauthier: 2 - Paul Gauthier (aider): 84 + Paul Gauthier (aider): 97 tests/basic/test_main.py: Paul Gauthier: 2 tests/basic/test_models.py: @@ -2733,19 +2739,19 @@ tests/basic/test_sanity_check_repo.py: fry69: 179 tests/basic/test_wholefile.py: - Paul Gauthier: 9 + Paul Gauthier: 16 grand_total: - Jonathan Ellis: 1 + Jonathan Ellis: 2 Mike Bailey: 25 - Paul Gauthier: 494 - Paul Gauthier (aider): 600 + Paul Gauthier: 441 + Paul Gauthier (aider): 658 Stein Martin Hustad: 26 - fry69: 196 + fry69: 197 rti: 1 start_tag: v0.57.0 - total_lines: 1343 -- aider_percentage: 68.72 - aider_total: 123 + total_lines: 1350 +- aider_percentage: 72.14 + aider_total: 145 end_date: '2024-10-04' end_tag: v0.59.0 file_counts: @@ -2764,7 +2770,7 @@ Paul Gauthier: 1 aider/commands.py: Paul Gauthier: 3 - Paul Gauthier (aider): 47 + Paul Gauthier (aider): 49 aider/gui.py: Paul Gauthier: 2 aider/main.py: @@ -2787,7 +2793,7 @@ Paul Gauthier: 2 tests/basic/test_commands.py: Paul Gauthier: 4 - Paul Gauthier (aider): 33 + Paul Gauthier (aider): 53 tests/basic/test_models.py: Paul Gauthier: 1 Paul Gauthier (aider): 18 @@ -2797,11 +2803,11 @@ Paul Gauthier: 1 grand_total: Paul Gauthier: 56 - Paul Gauthier (aider): 123 + Paul Gauthier (aider): 145 start_tag: v0.58.0 - total_lines: 179 -- aider_percentage: 57.2 - aider_total: 139 + total_lines: 201 +- aider_percentage: 51.47 + aider_total: 140 end_date: '2024-10-22' end_tag: v0.60.0 file_counts: @@ -2831,9 +2837,9 @@ Paul Gauthier: 20 Paul Gauthier (aider): 39 aider/models.py: - Paul Gauthier: 9 + Paul Gauthier: 18 Sven Grunewaldt: 10 - fry69: 5 + fry69: 16 aider/resources/__init__.py: Paul Gauthier: 3 aider/sendchat.py: @@ -2841,22 +2847,22 @@ aider/website/docs/leaderboards/index.md: Paul Gauthier: 1 tests/basic/test_editblock.py: - Paul Gauthier: 15 + Paul Gauthier: 23 tests/basic/test_main.py: Paul Gauthier: 1 tests/help/test_help.py: Paul Gauthier: 4 - Paul Gauthier (aider): 45 + Paul Gauthier (aider): 46 grand_total: Jonathan Ellis: 10 - Paul Gauthier: 77 - Paul Gauthier (aider): 139 + Paul Gauthier: 94 + Paul Gauthier (aider): 140 Sven Grunewaldt: 10 - fry69: 7 + fry69: 18 start_tag: v0.59.0 - total_lines: 243 -- aider_percentage: 67.04 - aider_total: 781 + total_lines: 272 +- aider_percentage: 65.31 + aider_total: 804 end_date: '2024-11-01' end_tag: v0.61.0 file_counts: @@ -2866,31 +2872,31 @@ Paul Gauthier: 75 Paul Gauthier (aider): 89 aider/args.py: - Paul Gauthier: 9 - Paul Gauthier (aider): 21 + Paul Gauthier: 6 + Paul Gauthier (aider): 28 aider/coders/base_coder.py: - Paul Gauthier: 55 + Paul Gauthier: 56 Paul Gauthier (aider): 43 aider/coders/editblock_coder.py: Paul Gauthier: 14 aider/commands.py: - Paul Gauthier: 12 - Paul Gauthier (aider): 88 + Paul Gauthier: 14 + Paul Gauthier (aider): 86 aider/io.py: Paul Gauthier: 12 Paul Gauthier (aider): 32 aider/linter.py: Paul Gauthier: 6 aider/main.py: - Paul Gauthier: 46 - Paul Gauthier (aider): 12 + Paul Gauthier: 48 + Paul Gauthier (aider): 10 aider/models.py: - Paul Gauthier: 22 - Paul Gauthier (aider): 54 + Paul Gauthier: 40 + Paul Gauthier (aider): 63 kAIto47802: 4 aider/repomap.py: - Paul Gauthier: 8 - Paul Gauthier (aider): 54 + Paul Gauthier: 12 + Paul Gauthier (aider): 52 aider/sendchat.py: Paul Gauthier: 23 Paul Gauthier (aider): 23 @@ -2909,11 +2915,12 @@ Paul Gauthier: 1 Paul Gauthier (aider): 99 tests/basic/test_commands.py: - Konstantin L: 10 - Paul Gauthier: 80 - Paul Gauthier (aider): 197 + Konstantin L: 16 + Paul Gauthier: 91 + Paul Gauthier (aider): 212 tests/basic/test_io.py: - Paul Gauthier (aider): 6 + Paul Gauthier: 2 + Paul Gauthier (aider): 4 tests/basic/test_main.py: Paul Gauthier (aider): 3 tests/basic/test_models.py: @@ -2924,38 +2931,38 @@ tests/basic/test_sendchat.py: Paul Gauthier (aider): 8 grand_total: - Konstantin L: 10 - Paul Gauthier: 370 - Paul Gauthier (aider): 781 + Konstantin L: 16 + Paul Gauthier: 407 + Paul Gauthier (aider): 804 kAIto47802: 4 start_tag: v0.60.0 - total_lines: 1165 -- aider_percentage: 77.78 - aider_total: 56 + total_lines: 1231 +- aider_percentage: 80.49 + aider_total: 66 end_date: '2024-11-04' end_tag: v0.62.0 file_counts: aider/__init__.py: Paul Gauthier: 1 aider/args.py: - Paul Gauthier (aider): 12 + Paul Gauthier (aider): 14 aider/coders/editblock_coder.py: Paul Gauthier: 6 aider/main.py: Paul Gauthier (aider): 4 aider/models.py: Paul Gauthier: 5 - Paul Gauthier (aider): 28 + Paul Gauthier (aider): 36 aider/website/docs/leaderboards/index.md: Paul Gauthier: 4 Paul Gauthier (aider): 12 grand_total: Paul Gauthier: 16 - Paul Gauthier (aider): 56 + Paul Gauthier (aider): 66 start_tag: v0.61.0 - total_lines: 72 -- aider_percentage: 55.21 - aider_total: 350 + total_lines: 82 +- aider_percentage: 54.99 + aider_total: 369 end_date: '2024-11-13' end_tag: v0.63.0 file_counts: @@ -2980,13 +2987,13 @@ Paul Gauthier: 9 Paul Gauthier (aider): 9 aider/models.py: - Logan Attwood: 13 - Paul Gauthier: 37 - Paul Gauthier (aider): 4 + Logan Attwood: 17 + Paul Gauthier: 50 + Paul Gauthier (aider): 7 aider/repo.py: Paul Gauthier: 7 aider/repomap.py: - Paul Gauthier: 3 + Paul Gauthier: 4 aider/sendchat.py: Paul Gauthier: 17 Paul Gauthier (aider): 4 @@ -2994,11 +3001,11 @@ Paul Gauthier: 1 scripts/issues.py: Paul Gauthier: 4 - Paul Gauthier (aider): 179 + Paul Gauthier (aider): 183 tests/basic/test_coder.py: Paul Gauthier: 2 tests/basic/test_commands.py: - Paul Gauthier (aider): 13 + Paul Gauthier (aider): 16 tests/basic/test_editblock.py: Paul Gauthier: 41 tests/basic/test_exceptions.py: @@ -3010,17 +3017,17 @@ Paul Gauthier (aider): 2 tests/basic/test_sendchat.py: Paul Gauthier: 8 - Paul Gauthier (aider): 46 + Paul Gauthier (aider): 55 tests/scrape/test_scrape.py: Paul Gauthier: 1 grand_total: - Logan Attwood: 13 - Paul Gauthier: 271 - Paul Gauthier (aider): 350 + Logan Attwood: 17 + Paul Gauthier: 285 + Paul Gauthier (aider): 369 start_tag: v0.62.0 - total_lines: 634 -- aider_percentage: 73.55 - aider_total: 865 + total_lines: 671 +- aider_percentage: 72.99 + aider_total: 873 end_date: '2024-11-21' end_tag: v0.64.0 file_counts: @@ -3031,7 +3038,7 @@ Paul Gauthier (aider): 21 aider/args.py: Paul Gauthier: 2 - Paul Gauthier (aider): 9 + Paul Gauthier (aider): 10 aider/coders/base_coder.py: Paul Gauthier: 15 Paul Gauthier (aider): 3 @@ -3041,8 +3048,8 @@ Paul Gauthier: 5 Paul Gauthier (aider): 19 aider/editor.py: - Chad Phillips: 135 - Paul Gauthier (aider): 11 + Chad Phillips: 133 + Paul Gauthier (aider): 13 aider/exceptions.py: Paul Gauthier: 5 aider/help_pats.py: @@ -3052,22 +3059,22 @@ Paul Gauthier (aider): 41 mw: 21 aider/main.py: - Paul Gauthier: 18 - Paul Gauthier (aider): 35 + Paul Gauthier: 21 + Paul Gauthier (aider): 37 aider/models.py: - Paul Gauthier: 31 - Paul Gauthier (aider): 34 + Paul Gauthier: 41 + Paul Gauthier (aider): 33 aider/repo.py: Paul Gauthier (aider): 5 aider/urls.py: Paul Gauthier: 1 aider/website/_includes/edit-leaderboard.js: - Paul Gauthier (aider): 96 + Paul Gauthier (aider): 97 aider/website/_includes/quant-chart.js: Paul Gauthier: 3 - Paul Gauthier (aider): 65 + Paul Gauthier (aider): 66 aider/website/_includes/refactor-leaderboard.js: - Paul Gauthier (aider): 89 + Paul Gauthier (aider): 90 aider/website/docs/leaderboards/index.md: Paul Gauthier: 1 Paul Gauthier (aider): 10 @@ -3075,7 +3082,7 @@ Paul Gauthier (aider): 29 benchmark/over_time.py: Paul Gauthier: 11 - Paul Gauthier (aider): 162 + Paul Gauthier (aider): 159 scripts/blame.py: Paul Gauthier: 1 Paul Gauthier (aider): 2 @@ -3083,7 +3090,7 @@ Paul Gauthier: 5 Paul Gauthier (aider): 12 scripts/versionbump.py: - Paul Gauthier: 5 + Paul Gauthier: 7 tests/basic/test_analytics.py: Paul Gauthier: 12 Paul Gauthier (aider): 30 @@ -3092,20 +3099,20 @@ tests/basic/test_editor.py: Paul Gauthier (aider): 129 tests/basic/test_main.py: - Paul Gauthier (aider): 5 + Paul Gauthier (aider): 8 tests/basic/test_models.py: - Paul Gauthier: 4 - Paul Gauthier (aider): 54 + Paul Gauthier: 3 + Paul Gauthier (aider): 55 grand_total: - Chad Phillips: 148 - Paul Gauthier: 141 - Paul Gauthier (aider): 865 + Chad Phillips: 146 + Paul Gauthier: 155 + Paul Gauthier (aider): 873 caetanominuzzo: 1 mw: 21 start_tag: v0.63.0 - total_lines: 1176 -- aider_percentage: 81.19 - aider_total: 544 + total_lines: 1196 +- aider_percentage: 81.11 + aider_total: 584 end_date: '2024-11-26' end_tag: v0.65.0 file_counts: @@ -3115,7 +3122,7 @@ Paul Gauthier: 2 Paul Gauthier (aider): 5 aider/args.py: - Paul Gauthier (aider): 10 + Paul Gauthier (aider): 12 aider/coders/base_coder.py: Paul Gauthier: 1 Paul Gauthier (aider): 31 @@ -3125,13 +3132,13 @@ Paul Gauthier: 3 Paul Gauthier (aider): 9 aider/main.py: - Paul Gauthier: 13 + Paul Gauthier: 15 Paul Gauthier (aider): 19 aider/models.py: Paul Gauthier: 9 Paul Gauthier (aider): 17 aider/queries/tree-sitter-dart-tags.scm: - malkoG: 83 + malkoG: 91 aider/urls.py: Paul Gauthier (aider): 1 aider/website/_includes/quant-chart.js: @@ -3151,24 +3158,24 @@ Paul Gauthier: 8 Paul Gauthier (aider): 64 tests/basic/test_coder.py: - Paul Gauthier (aider): 70 + Paul Gauthier (aider): 81 tests/basic/test_editor.py: - Paul Gauthier (aider): 12 + Paul Gauthier (aider): 16 tests/basic/test_main.py: Paul Gauthier: 1 - Paul Gauthier (aider): 19 + Paul Gauthier (aider): 42 tests/basic/test_models.py: Paul Gauthier (aider): 30 tests/basic/test_repomap.py: Paul Gauthier (aider): 13 grand_total: - Paul Gauthier: 43 - Paul Gauthier (aider): 544 - malkoG: 83 + Paul Gauthier: 45 + Paul Gauthier (aider): 584 + malkoG: 91 start_tag: v0.64.0 - total_lines: 670 -- aider_percentage: 86.17 - aider_total: 841 + total_lines: 720 +- aider_percentage: 86.35 + aider_total: 854 end_date: '2024-12-01' end_tag: v0.66.0 file_counts: @@ -3195,7 +3202,7 @@ Philippe de Reynal: 6 aider/coders/base_coder.py: Paul Gauthier: 15 - Paul Gauthier (aider): 39 + Paul Gauthier (aider): 41 aider/commands.py: Paul Gauthier: 5 Paul Gauthier (aider): 27 @@ -3223,12 +3230,12 @@ scripts/issues.py: Paul Gauthier: 3 scripts/update-history.py: - Paul Gauthier (aider): 58 + Paul Gauthier (aider): 59 tests/basic/test_coder.py: Paul Gauthier: 4 tests/basic/test_commands.py: - Paul Gauthier: 10 - Paul Gauthier (aider): 64 + Paul Gauthier: 12 + Paul Gauthier (aider): 72 tests/basic/test_main.py: Paul Gauthier (aider): 4 tests/basic/test_models.py: @@ -3263,8 +3270,7 @@ Paul Gauthier: 1 Paul Gauthier (aider): 25 tests/fixtures/languages/ocaml/test.ml: - Paul Gauthier: 2 - Paul Gauthier (aider): 17 + Paul Gauthier (aider): 19 tests/fixtures/languages/php/test.php: Paul Gauthier (aider): 5 tests/fixtures/languages/python/test.py: @@ -3282,12 +3288,12 @@ Paul Gauthier (aider): 3 grand_total: Paul Gauthier: 105 - Paul Gauthier (aider): 841 + Paul Gauthier (aider): 854 Philippe de Reynal: 30 start_tag: v0.65.0 - total_lines: 976 -- aider_percentage: 67.86 - aider_total: 437 + total_lines: 989 +- aider_percentage: 64.41 + aider_total: 429 end_date: '2024-12-06' end_tag: v0.67.0 file_counts: @@ -3300,14 +3306,14 @@ Paul Gauthier (aider): 7 aider/args.py: Paul Gauthier: 3 - Paul Gauthier (aider): 4 + Paul Gauthier (aider): 5 aider/coders/base_coder.py: Paul Gauthier: 15 aider/commands.py: Paul Gauthier: 11 aider/io.py: Paul Gauthier: 28 - Paul Gauthier (aider): 31 + Paul Gauthier (aider): 32 aider/llm.py: Paul Gauthier: 5 aider/main.py: @@ -3321,10 +3327,10 @@ Paul Gauthier: 7 Paul Gauthier (aider): 22 aider/watch.py: - Paul Gauthier: 51 - Paul Gauthier (aider): 221 + Paul Gauthier: 52 + Paul Gauthier (aider): 211 aider/website/_includes/qwq-chart.js: - Paul Gauthier: 30 + Paul Gauthier: 55 Paul Gauthier (aider): 47 aider/website/docs/leaderboards/index.md: Paul Gauthier: 1 @@ -3340,7 +3346,7 @@ tests/basic/test_main.py: Paul Gauthier: 1 tests/basic/test_models.py: - Paul Gauthier: 4 + Paul Gauthier: 8 Paul Gauthier (aider): 7 tests/basic/test_watch.py: Paul Gauthier: 10 @@ -3349,12 +3355,12 @@ Paul Gauthier: 2 Paul Gauthier (aider): 1 grand_total: - Paul Gauthier: 207 - Paul Gauthier (aider): 437 + Paul Gauthier: 237 + Paul Gauthier (aider): 429 start_tag: v0.66.0 - total_lines: 644 -- aider_percentage: 71.57 - aider_total: 428 + total_lines: 666 +- aider_percentage: 65.11 + aider_total: 418 end_date: '2024-12-10' end_tag: v0.68.0 file_counts: @@ -3365,21 +3371,21 @@ aider/analytics.py: Paul Gauthier: 2 aider/args.py: - Paul Gauthier: 30 - Paul Gauthier (aider): 15 + Paul Gauthier: 62 + Paul Gauthier (aider): 7 aider/coders/base_coder.py: Paul Gauthier: 12 - Paul Gauthier (aider): 10 + Paul Gauthier (aider): 12 aider/coders/editor_editblock_coder.py: Paul Gauthier: 1 aider/coders/editor_whole_coder.py: Paul Gauthier: 1 aider/commands.py: - Paul Gauthier: 24 - Paul Gauthier (aider): 25 + Paul Gauthier: 28 + Paul Gauthier (aider): 21 aider/copypaste.py: - Paul Gauthier: 4 - Paul Gauthier (aider): 68 + Paul Gauthier: 5 + Paul Gauthier (aider): 60 aider/exceptions.py: Paul Gauthier: 9 aider/history.py: @@ -3387,8 +3393,8 @@ aider/io.py: Paul Gauthier: 13 aider/main.py: - Paul Gauthier: 17 - Paul Gauthier (aider): 29 + Paul Gauthier: 34 + Paul Gauthier (aider): 26 aider/models.py: Paul Gauthier: 15 aider/repo.py: @@ -3419,11 +3425,11 @@ scripts/pip-compile.sh: Paul Gauthier: 2 tests/basic/test_commands.py: - Paul Gauthier (aider): 24 + Paul Gauthier (aider): 28 tests/basic/test_history.py: Paul Gauthier (aider): 3 tests/basic/test_main.py: - Paul Gauthier (aider): 46 + Paul Gauthier (aider): 53 tests/basic/test_repo.py: Paul Gauthier (aider): 3 tests/basic/test_sendchat.py: @@ -3432,12 +3438,12 @@ tests/basic/test_watch.py: Paul Gauthier: 1 grand_total: - Paul Gauthier: 170 - Paul Gauthier (aider): 428 + Paul Gauthier: 224 + Paul Gauthier (aider): 418 start_tag: v0.67.0 - total_lines: 598 -- aider_percentage: 67.87 - aider_total: 207 + total_lines: 642 +- aider_percentage: 68.65 + aider_total: 219 end_date: '2024-12-13' end_tag: v0.69.0 file_counts: @@ -3448,7 +3454,7 @@ aider/analytics.py: Paul Gauthier: 2 aider/args.py: - Mir Adnan ALI: 3 + Mir Adnan ALI: 5 Paul Gauthier: 1 aider/coders/base_coder.py: JeongJuhyeon: 1 @@ -3476,7 +3482,7 @@ scripts/blame.py: Paul Gauthier (aider): 1 scripts/issues.py: - Paul Gauthier (aider): 58 + Paul Gauthier (aider): 70 scripts/update-history.py: Paul Gauthier: 3 tests/basic/test_io.py: @@ -3486,13 +3492,13 @@ Paul Gauthier (aider): 68 grand_total: JeongJuhyeon: 1 - Mir Adnan ALI: 48 + Mir Adnan ALI: 50 Paul Gauthier: 49 - Paul Gauthier (aider): 207 + Paul Gauthier (aider): 219 start_tag: v0.68.0 - total_lines: 305 -- aider_percentage: 74.22 - aider_total: 875 + total_lines: 319 +- aider_percentage: 73.19 + aider_total: 871 end_date: '2024-12-26' end_tag: v0.70.0 file_counts: @@ -3500,13 +3506,13 @@ Paul Gauthier: 1 aider/analytics.py: Paul Gauthier: 6 - Paul Gauthier (aider): 41 + Paul Gauthier (aider): 42 aider/args.py: Evan Johnson: 2 aider/coders/search_replace.py: Paul Gauthier: 5 aider/commands.py: - Paul Gauthier (aider): 41 + Paul Gauthier (aider): 36 aider/help_pats.py: Paul Gauthier: 3 aider/io.py: @@ -3518,7 +3524,7 @@ apaz-cli: 3 mdk: 6 aider/models.py: - Paul Gauthier: 29 + Paul Gauthier: 38 aider/repo.py: Paul Gauthier: 14 aider/utils.py: @@ -3536,8 +3542,8 @@ Paul Gauthier: 8 Paul Gauthier (aider): 43 benchmark/benchmark.py: - Paul Gauthier: 69 - Paul Gauthier (aider): 153 + Paul Gauthier: 70 + Paul Gauthier (aider): 152 benchmark/clone-exercism.sh: Paul Gauthier: 2 Paul Gauthier (aider): 18 @@ -3552,8 +3558,8 @@ Paul Gauthier: 10 Paul Gauthier (aider): 3 benchmark/problem_stats.py: - Paul Gauthier: 35 - Paul Gauthier (aider): 318 + Paul Gauthier: 34 + Paul Gauthier (aider): 319 benchmark/rsync.sh: Paul Gauthier: 7 Paul Gauthier (aider): 26 @@ -3570,17 +3576,17 @@ tests/basic/test_main.py: Paul Gauthier (aider): 7 tests/basic/test_sanity_check_repo.py: - mdk: 28 + mdk: 34 grand_total: Evan Johnson: 2 - Paul Gauthier: 265 - Paul Gauthier (aider): 875 + Paul Gauthier: 274 + Paul Gauthier (aider): 871 apaz-cli: 3 - mdk: 34 + mdk: 40 start_tag: v0.69.0 - total_lines: 1179 -- aider_percentage: 60.36 - aider_total: 236 + total_lines: 1190 +- aider_percentage: 60.61 + aider_total: 237 end_date: '2025-01-10' end_tag: v0.71.0 file_counts: @@ -3598,7 +3604,7 @@ Paul Gauthier: 3 Paul Gauthier (aider): 16 aider/linter.py: - Aaron Weisberg: 5 + Aaron Weisberg: 6 aider/main.py: Paul Gauthier: 7 Paul Gauthier (aider): 13 @@ -3634,32 +3640,30 @@ Paul Gauthier (aider): 32 scripts/update-history.py: Paul Gauthier (aider): 1 - tests/basic/test_commands.py: - Paul Gauthier: 2 tests/basic/test_io.py: - Paul Gauthier (aider): 6 + Paul Gauthier (aider): 7 tests/basic/test_linter.py: Aaron Weisberg: 2 tests/basic/test_models.py: Paul Gauthier (aider): 25 grand_total: - Aaron Weisberg: 9 + Aaron Weisberg: 10 Josh Vera: 1 Krazer: 10 Nimesh Ghelani: 1 - Paul Gauthier: 104 - Paul Gauthier (aider): 236 + Paul Gauthier: 102 + Paul Gauthier (aider): 237 Paul Maunders: 12 apaz-cli: 18 start_tag: v0.70.0 total_lines: 391 -- aider_percentage: 48.76 - aider_total: 138 +- aider_percentage: 48.35 + aider_total: 161 end_date: '2025-01-20' end_tag: v0.72.0 file_counts: .github/workflows/docker-build-test.yml: - Paul Gauthier (aider): 38 + Paul Gauthier (aider): 58 .github/workflows/pages.yml: Paul Gauthier: 3 Paul Gauthier (aider): 1 @@ -3673,6 +3677,7 @@ Titusz Pan: 6 aider/coders/base_coder.py: Paul Gauthier: 11 + Paul Gauthier (aider): 2 aider/coders/single_wholefile_func_coder.py: Paul Gauthier: 1 aider/coders/wholefile_func_coder.py: @@ -3683,11 +3688,11 @@ Paul Gauthier: 7 aider/io.py: Paul Gauthier (aider): 14 - Titusz Pan: 2 + Titusz Pan: 6 aider/main.py: Titusz Pan: 1 aider/models.py: - Paul Gauthier: 16 + Paul Gauthier: 39 aider/queries/tree-sitter-kotlin-tags.scm: Paul Walker: 27 aider/repomap.py: @@ -3711,31 +3716,30 @@ scripts/update-docs.sh: Paul Gauthier: 2 tests/basic/test_io.py: - Paul Gauthier (aider): 39 + Paul Gauthier (aider): 40 tests/basic/test_repomap.py: Paul Walker: 1 tests/fixtures/languages/kotlin/test.kt: Paul Walker: 16 grand_total: - Paul Gauthier: 92 - Paul Gauthier (aider): 138 + Paul Gauthier: 115 + Paul Gauthier (aider): 161 Paul Walker: 44 - Titusz Pan: 9 + Titusz Pan: 13 start_tag: v0.71.0 - total_lines: 283 -- aider_percentage: 37.47 - aider_total: 284 + total_lines: 333 +- aider_percentage: 33.7 + aider_total: 307 end_date: '2025-01-31' end_tag: v0.73.0 file_counts: aider/__init__.py: Paul Gauthier: 1 aider/args.py: - Paul Gauthier: 3 - Paul Gauthier (aider): 2 + Paul Gauthier: 5 aider/coders/base_coder.py: - Paul Gauthier: 37 - Paul Gauthier (aider): 26 + Paul Gauthier: 38 + Paul Gauthier (aider): 29 aider/commands.py: xqyz: 1 aider/io.py: @@ -3745,14 +3749,14 @@ Paul Gauthier (aider): 15 aider/models.py: Paul Gauthier: 8 - Paul Gauthier (aider): 33 + Paul Gauthier (aider): 34 aider/resources/model-settings.yml: - Paul Gauthier: 334 - kennyfrc: 11 - xqyz: 4 + Paul Gauthier: 442 + kennyfrc: 17 + xqyz: 12 aider/sendchat.py: - Mir Adnan ALI: 28 - Paul Gauthier: 11 + Mir Adnan ALI: 26 + Paul Gauthier: 13 Paul Gauthier (aider): 6 aider/urls.py: Paul Gauthier: 1 @@ -3766,22 +3770,22 @@ benchmark/rsync.sh: Paul Gauthier: 2 tests/basic/test_coder.py: - Paul Gauthier: 10 - Paul Gauthier (aider): 39 + Paul Gauthier: 15 + Paul Gauthier (aider): 53 tests/basic/test_main.py: - Paul Gauthier (aider): 62 + Paul Gauthier (aider): 69 tests/basic/test_sendchat.py: Paul Gauthier (aider): 77 grand_total: - Mir Adnan ALI: 28 - Paul Gauthier: 430 - Paul Gauthier (aider): 284 - kennyfrc: 11 - xqyz: 5 + Mir Adnan ALI: 26 + Paul Gauthier: 548 + Paul Gauthier (aider): 307 + kennyfrc: 17 + xqyz: 13 start_tag: v0.72.0 - total_lines: 758 -- aider_percentage: 76.07 - aider_total: 604 + total_lines: 911 +- aider_percentage: 72.82 + aider_total: 635 end_date: '2025-02-06' end_tag: v0.74.0 file_counts: @@ -3799,27 +3803,27 @@ aider/commands.py: Paul Gauthier: 1 aider/exceptions.py: - Paul Gauthier: 4 - Paul Gauthier (aider): 6 + Paul Gauthier: 3 + Paul Gauthier (aider): 7 aider/history.py: Paul Gauthier (aider): 1 aider/io.py: Paul Gauthier: 4 - Paul Gauthier (aider): 18 + Paul Gauthier (aider): 20 aider/llm.py: Paul Gauthier: 3 aider/main.py: Paul Gauthier: 21 Paul Gauthier (aider): 25 aider/models.py: - Paul Gauthier: 83 + Paul Gauthier: 104 Paul Gauthier (aider): 77 aider/repo.py: Paul Gauthier: 1 Paul Gauthier (aider): 2 "Viktor Sz\xE9pe": 3 aider/resources/model-settings.yml: - Paul Gauthier: 11 + Paul Gauthier: 24 aider/watch.py: Paul Gauthier (aider): 45 benchmark/docker.sh: @@ -3828,31 +3832,31 @@ Paul Gauthier: 5 Paul Gauthier (aider): 4 tests/basic/test_editblock.py: - Paul Gauthier: 7 + Paul Gauthier: 21 tests/basic/test_history.py: Paul Gauthier (aider): 13 tests/basic/test_io.py: - Paul Gauthier (aider): 46 + Paul Gauthier (aider): 68 tests/basic/test_main.py: Paul Gauthier: 8 Paul Gauthier (aider): 1 tests/basic/test_models.py: - Paul Gauthier (aider): 297 + Paul Gauthier (aider): 298 tests/basic/test_repo.py: Paul Gauthier (aider): 11 tests/basic/test_sendchat.py: Paul Gauthier (aider): 7 tests/basic/test_watch.py: Paul Gauthier: 4 - Paul Gauthier (aider): 42 + Paul Gauthier (aider): 47 grand_total: - Paul Gauthier: 187 - Paul Gauthier (aider): 604 + Paul Gauthier: 234 + Paul Gauthier (aider): 635 "Viktor Sz\xE9pe": 3 start_tag: v0.73.0 - total_lines: 794 -- aider_percentage: 44.78 - aider_total: 163 + total_lines: 872 +- aider_percentage: 43.8 + aider_total: 166 end_date: '2025-02-24' end_tag: v0.75.0 file_counts: @@ -3874,7 +3878,7 @@ aider/linter.py: Paul Gauthier: 1 aider/main.py: - Paul Gauthier: 16 + Paul Gauthier: 20 aider/models.py: Paul Gauthier: 4 aider/queries/tree-sitter-language-pack/javascript-tags.scm: @@ -3888,7 +3892,7 @@ Paul Gauthier: 43 Paul Gauthier (aider): 11 aider/resources/model-settings.yml: - Paul Gauthier: 12 + Paul Gauthier: 20 aider/special.py: Lucas Shadler: 1 aider/website/docs/leaderboards/index.md: @@ -3902,9 +3906,9 @@ scripts/blame.py: Paul Gauthier (aider): 2 scripts/issues.py: - Paul Gauthier (aider): 17 + Paul Gauthier (aider): 19 tests/basic/test_coder.py: - Paul Gauthier (aider): 18 + Paul Gauthier (aider): 19 tests/basic/test_editor.py: Antti Kaihola: 1 Paul Gauthier (aider): 41 @@ -3918,40 +3922,40 @@ Antti Kaihola: 1 FeepingCreature (aider): 6 Lucas Shadler: 1 - Paul Gauthier: 125 - Paul Gauthier (aider): 157 + Paul Gauthier: 137 + Paul Gauthier (aider): 160 Warren Krewenki: 74 start_tag: v0.74.0 - total_lines: 364 -- aider_percentage: 84.75 - aider_total: 1589 + total_lines: 379 +- aider_percentage: 82.52 + aider_total: 1667 end_date: '2025-03-10' end_tag: v0.76.0 file_counts: aider/__init__.py: Paul Gauthier: 1 aider/args.py: - Paul Gauthier: 2 + Paul Gauthier: 5 Paul Gauthier (aider): 25 aider/args_formatter.py: Paul Gauthier: 4 Paul Gauthier (aider): 3 aider/coders/base_coder.py: - Paul Gauthier: 54 - Paul Gauthier (aider): 29 + Paul Gauthier: 57 + Paul Gauthier (aider): 30 aider/deprecated.py: - Paul Gauthier (aider): 107 + Paul Gauthier (aider): 125 aider/io.py: Paul Gauthier: 7 - Paul Gauthier (aider): 127 + Paul Gauthier (aider): 130 aider/main.py: Akira Komamura: 2 Mattias: 1 Paul Gauthier: 4 Paul Gauthier (aider): 16 aider/models.py: - Paul Gauthier: 6 - Paul Gauthier (aider): 68 + Paul Gauthier: 11 + Paul Gauthier (aider): 72 aider/queries/tree-sitter-language-pack/csharp-tags.scm: Paul Gauthier: 14 Paul Gauthier (aider): 12 @@ -3960,13 +3964,13 @@ Paul Gauthier (aider): 68 aider/repo.py: Akira Komamura: 1 - Paul Gauthier (aider): 4 + Paul Gauthier (aider): 5 aider/repomap.py: Paul Gauthier: 9 aider/resources/model-settings.yml: - Paul Gauthier: 61 - Paul Gauthier (aider): 32 - gmoz22: 4 + Paul Gauthier: 105 + Paul Gauthier (aider): 51 + gmoz22: 12 aider/website/_includes/leaderboard.js: Paul Gauthier (aider): 48 aider/website/docs/leaderboards/index.md: @@ -3980,7 +3984,7 @@ scripts/blame.py: Paul Gauthier: 1 scripts/pip-compile.sh: - Claudia Pellegrino: 10 + Claudia Pellegrino: 12 Paul Gauthier: 6 Paul Gauthier (aider): 11 scripts/update-history.py: @@ -3990,49 +3994,49 @@ Paul Gauthier (aider): 64 tests/basic/test_deprecated.py: Paul Gauthier: 10 - Paul Gauthier (aider): 130 + Paul Gauthier (aider): 125 tests/basic/test_io.py: Paul Gauthier (aider): 54 tests/basic/test_main.py: - Paul Gauthier: 1 - Paul Gauthier (aider): 93 + Paul Gauthier: 2 + Paul Gauthier (aider): 97 tests/basic/test_model_info_manager.py: - Paul Gauthier (aider): 72 + Paul Gauthier (aider): 80 tests/basic/test_models.py: - Paul Gauthier: 27 - Paul Gauthier (aider): 34 + Paul Gauthier: 31 + Paul Gauthier (aider): 38 tests/basic/test_reasoning.py: - Paul Gauthier: 36 - Paul Gauthier (aider): 525 + Paul Gauthier: 33 + Paul Gauthier (aider): 534 tests/basic/test_repomap.py: Paul Gauthier: 2 tests/basic/test_ssl_verification.py: - Paul Gauthier (aider): 65 + Paul Gauthier (aider): 77 grand_total: Akira Komamura: 3 - Claudia Pellegrino: 10 + Claudia Pellegrino: 12 Mattias: 1 - Paul Gauthier: 268 - Paul Gauthier (aider): 1589 - gmoz22: 4 + Paul Gauthier: 325 + Paul Gauthier (aider): 1667 + gmoz22: 12 start_tag: v0.75.0 - total_lines: 1875 -- aider_percentage: 71.93 - aider_total: 1399 + total_lines: 2020 +- aider_percentage: 68.94 + aider_total: 1447 end_date: '2025-03-13' end_tag: v0.77.0 file_counts: aider/__init__.py: Paul Gauthier: 1 aider/args.py: - Paul Gauthier (aider): 5 + Paul Gauthier (aider): 7 aider/coders/architect_coder.py: Paul Gauthier (aider): 2 aider/coders/base_coder.py: Paul Gauthier (aider): 14 aider/commands.py: Paul Gauthier: 4 - Paul Gauthier (aider): 71 + Paul Gauthier (aider): 73 aider/deprecated.py: Paul Gauthier: 2 aider/io.py: @@ -4060,25 +4064,25 @@ Paul Gauthier: 9 Paul Gauthier (aider): 17 aider/queries/tree-sitter-language-pack/dart-tags.scm: - Paul Gauthier: 42 + Paul Gauthier: 65 Paul Gauthier (aider): 19 aider/queries/tree-sitter-language-pack/elisp-tags.scm: - Paul Gauthier: 1 + Paul Gauthier: 3 Paul Gauthier (aider): 2 aider/queries/tree-sitter-language-pack/elixir-tags.scm: - Paul Gauthier: 10 + Paul Gauthier: 35 Paul Gauthier (aider): 8 aider/queries/tree-sitter-language-pack/elm-tags.scm: Paul Gauthier: 8 - Paul Gauthier (aider): 11 + Paul Gauthier (aider): 6 aider/queries/tree-sitter-language-pack/gleam-tags.scm: Paul Gauthier: 26 Paul Gauthier (aider): 15 aider/queries/tree-sitter-language-pack/go-tags.scm: - Paul Gauthier: 14 - Paul Gauthier (aider): 14 + Paul Gauthier: 28 + Paul Gauthier (aider): 10 aider/queries/tree-sitter-language-pack/java-tags.scm: - Paul Gauthier: 10 + Paul Gauthier: 13 Paul Gauthier (aider): 7 aider/queries/tree-sitter-language-pack/lua-tags.scm: Paul Gauthier: 25 @@ -4099,10 +4103,10 @@ Paul Gauthier: 10 Paul Gauthier (aider): 2 aider/queries/tree-sitter-language-pack/ruby-tags.scm: - Paul Gauthier: 23 + Paul Gauthier: 52 Paul Gauthier (aider): 12 aider/queries/tree-sitter-language-pack/rust-tags.scm: - Paul Gauthier: 41 + Paul Gauthier: 46 Paul Gauthier (aider): 14 aider/queries/tree-sitter-language-pack/solidity-tags.scm: Paul Gauthier: 30 @@ -4114,7 +4118,7 @@ Paul Gauthier: 15 Paul Gauthier (aider): 5 aider/resources/model-settings.yml: - Paul Gauthier: 9 + Paul Gauthier: 12 aider/watch.py: Yutaka Matsubara: 4 aider/website/docs/leaderboards/index.md: @@ -4126,21 +4130,23 @@ scripts/tsl_pack_langs.py: Paul Gauthier (aider): 145 scripts/versionbump.py: + Paul Gauthier: 1 Paul Gauthier (aider): 1 tests/basic/test_coder.py: - Paul Gauthier (aider): 104 + Paul Gauthier: 1 + Paul Gauthier (aider): 109 tests/basic/test_commands.py: Paul Gauthier: 2 - Paul Gauthier (aider): 190 + Paul Gauthier (aider): 222 tests/basic/test_models.py: - Paul Gauthier (aider): 44 + Paul Gauthier (aider): 45 tests/basic/test_repomap.py: Paul Gauthier: 1 - Paul Gauthier (aider): 125 + Paul Gauthier (aider): 132 tests/fixtures/languages/arduino/test.ino: Paul Gauthier (aider): 21 tests/fixtures/languages/c/test.c: - Paul Gauthier (aider): 12 + Paul Gauthier (aider): 15 tests/fixtures/languages/chatito/test.chatito: Paul Gauthier (aider): 20 tests/fixtures/languages/commonlisp/test.lisp: @@ -4150,7 +4156,7 @@ tests/fixtures/languages/dart/test.dart: Paul Gauthier (aider): 21 tests/fixtures/languages/elm/test.elm: - Paul Gauthier (aider): 16 + Paul Gauthier (aider): 21 tests/fixtures/languages/gleam/test.gleam: Paul Gauthier (aider): 10 tests/fixtures/languages/lua/test.lua: @@ -4170,11 +4176,11 @@ tests/fixtures/languages/udev/test.rules: Paul Gauthier (aider): 22 grand_total: - Paul Gauthier: 542 - Paul Gauthier (aider): 1399 + Paul Gauthier: 648 + Paul Gauthier (aider): 1447 Yutaka Matsubara: 4 start_tag: v0.76.0 - total_lines: 1945 + total_lines: 2099 - aider_percentage: 91.82 aider_total: 2682 end_date: '2025-03-21' @@ -4500,3 +4506,391 @@ Paul Gauthier (aider): 1567 start_tag: v0.81.0 total_lines: 1706 +- aider_percentage: 66.89 + aider_total: 1735 + end_date: '2025-05-09' + end_tag: v0.83.0 + file_counts: + .github/workflows/check_pypi_version.yml: + Paul Gauthier (aider): 1 + .github/workflows/pre-commit.yml: + MDW: 48 + .github/workflows/ubuntu-tests.yml: + Paul Gauthier (aider): 1 + .github/workflows/windows-tests.yml: + Paul Gauthier (aider): 1 + .github/workflows/windows_check_pypi_version.yml: + Paul Gauthier (aider): 1 + aider/__init__.py: + Paul Gauthier: 1 + aider/args.py: + Andrew Grigorev: 5 + Andrew Grigorev (aider): 21 + Paul Gauthier (aider): 38 + aider/coders/__init__.py: + Paul Gauthier (aider): 2 + aider/coders/base_coder.py: + Andrew Grigorev (aider): 2 + Paul Gauthier: 60 + Paul Gauthier (aider): 104 + aider/coders/editblock_coder.py: + Paul Gauthier: 10 + Paul Gauthier (aider): 7 + zjy1412: 2 + aider/coders/editblock_fenced_coder.py: + MDW: 1 + aider/coders/help_coder.py: + MDW: 1 + aider/coders/patch_coder.py: + Paul Gauthier (aider): 38 + aider/coders/shell.py: + Paul Gauthier: 37 + aider/coders/udiff_coder.py: + Paul Gauthier: 2 + Paul Gauthier (aider): 9 + aider/coders/udiff_simple.py: + Paul Gauthier (aider): 14 + aider/commands.py: + Andrew Grigorev (aider): 10 + Paul Gauthier: 7 + Paul Gauthier (aider): 1 + aider/gui.py: + Jon Keys: 2 + aider/io.py: + Kay Gosho: 1 + Paul Gauthier (aider): 5 + aider/linter.py: + Paul Gauthier: 1 + Titusz Pan: 1 + aider/main.py: + Paul Gauthier (aider): 9 + aider/mdstream.py: + Paul Gauthier (aider): 11 + aider/models.py: + Paul Gauthier: 4 + Paul Gauthier (aider): 66 + Stefan Hladnik: 4 + Stefan Hladnik (aider): 41 + aider/queries/tree-sitter-language-pack/ocaml_interface-tags.scm: + Andrey Popp: 98 + aider/queries/tree-sitter-languages/ocaml_interface-tags.scm: + Andrey Popp: 98 + aider/repo.py: + Andrew Grigorev (aider): 136 + Paul Gauthier: 6 + Paul Gauthier (aider): 33 + aider/repomap.py: + Paul Gauthier: 5 + Paul Gauthier (aider): 6 + aider/resources/model-settings.yml: + Paul Gauthier: 183 + Paul Gauthier (aider): 175 + cantalupo555: 1 + aider/scrape.py: + Jon Keys: 12 + aider/utils.py: + Paul Gauthier: 13 + Paul Gauthier (aider): 131 + Titusz Pan: 1 + aider/waiting.py: + Paul Gauthier: 1 + Paul Gauthier (aider): 54 + aider/watch.py: + Paul Gauthier: 6 + Paul Gauthier (aider): 7 + aider/website/_includes/leaderboard_table.js: + Paul Gauthier: 2 + Paul Gauthier (aider): 18 + aider/website/docs/leaderboards/index.md: + Paul Gauthier: 1 + Paul Gauthier (aider): 2 + aider/website/index.html: + Paul Gauthier: 13 + benchmark/benchmark.py: + Paul Gauthier: 3 + Paul Gauthier (aider): 42 + benchmark/docker.sh: + Paul Gauthier: 2 + benchmark/refactor_tools.py: + MDW: 1 + scripts/30k-image.py: + MDW: 1 + scripts/clean_metadata.py: + Paul Gauthier (aider): 258 + scripts/update-history.py: + Paul Gauthier: 2 + Paul Gauthier (aider): 7 + tests/basic/test_coder.py: + Paul Gauthier (aider): 3 + tests/basic/test_commands.py: + Paul Gauthier: 2 + Paul Gauthier (aider): 90 + tests/basic/test_editblock.py: + Paul Gauthier: 10 + zjy1412: 52 + tests/basic/test_io.py: + Paul Gauthier (aider): 132 + tests/basic/test_linter.py: + Paul Gauthier: 22 + Titusz Pan: 10 + tests/basic/test_repo.py: + Andrew Grigorev: 1 + Andrew Grigorev (aider): 139 + Paul Gauthier: 79 + Paul Gauthier (aider): 6 + tests/basic/test_repomap.py: + Andrey Popp: 7 + tests/basic/test_watch.py: + MDW: 1 + tests/fixtures/languages/ocaml_interface/test.mli: + Andrey Popp: 14 + tests/scrape/test_playwright_disable.py: + Andrew Grigorev (aider): 111 + Paul Gauthier: 25 + Paul Gauthier (aider): 3 + grand_total: + Andrew Grigorev: 6 + Andrew Grigorev (aider): 419 + Andrey Popp: 217 + Jon Keys: 14 + Kay Gosho: 1 + MDW: 53 + Paul Gauthier: 497 + Paul Gauthier (aider): 1275 + Stefan Hladnik: 4 + Stefan Hladnik (aider): 41 + Titusz Pan: 12 + cantalupo555: 1 + zjy1412: 54 + start_tag: v0.82.0 + total_lines: 2594 +- aider_percentage: 78.92 + aider_total: 655 + end_date: '2025-05-30' + end_tag: v0.84.0 + file_counts: + aider/__init__.py: + Paul Gauthier: 1 + aider/args.py: + Paul Gauthier (aider): 27 + saviour: 2 + aider/args_formatter.py: + Paul Gauthier: 1 + aider/coders/base_coder.py: + Paul Gauthier: 4 + Paul Gauthier (aider): 10 + aider/commands.py: + Paul Gauthier (aider): 23 + wangboxue: 1 + aider/models.py: + Lih Chen: 15 + Paul Gauthier: 16 + Paul Gauthier (aider): 12 + aider/onboarding.py: + Paul Gauthier: 2 + aider/openrouter.py: + Paul Gauthier (aider): 120 + aider/repo.py: + Paul Gauthier: 1 + Paul Gauthier (aider): 10 + aider/repomap.py: + Paul Gauthier (aider): 1 + aider/resources/model-settings.yml: + Paul Gauthier: 71 + Paul Gauthier (aider): 193 + Trung Dinh: 11 + aider/utils.py: + Paul Gauthier (aider): 1 + aider/waiting.py: + Paul Gauthier: 2 + Paul Gauthier (aider): 6 + aider/website/docs/leaderboards/index.md: + Paul Gauthier: 1 + aider/website/index.html: + Paul Gauthier: 43 + scripts/update-history.py: + Paul Gauthier: 2 + tests/basic/test_coder.py: + Paul Gauthier: 2 + Paul Gauthier (aider): 144 + tests/basic/test_main.py: + Paul Gauthier (aider): 28 + tests/basic/test_models.py: + Paul Gauthier (aider): 2 + tests/basic/test_onboarding.py: + Paul Gauthier (aider): 5 + tests/basic/test_openrouter.py: + Paul Gauthier (aider): 73 + grand_total: + Lih Chen: 15 + Paul Gauthier: 146 + Paul Gauthier (aider): 655 + Trung Dinh: 11 + saviour: 2 + wangboxue: 1 + start_tag: v0.83.0 + total_lines: 830 +- aider_percentage: 22.79 + aider_total: 139 + end_date: '2025-06-27' + end_tag: v0.85.0 + file_counts: + aider/__init__.py: + Paul Gauthier: 1 + aider/analytics.py: + Paul Gauthier: 5 + Vasil Markoukin (aider): 6 + aider/args.py: + Kyosuke Takayama: 6 + Paul Gauthier: 5 + Paul Gauthier (aider): 2 + Vasil Markoukin (aider): 9 + omarcinkonis: 6 + aider/coders/base_coder.py: + Kyosuke Takayama: 3 + omarcinkonis: 3 + aider/coders/editblock_coder.py: + Mathis Beer (aider): 1 + aider/coders/search_replace.py: + Emmanuel Ferdman: 1 + aider/commands.py: + Ali Ayas (claude-sonnet-4-20250514): 6 + Matteo Landi: 16 + Paul Gauthier: 4 + omarcinkonis: 5 + aider/history.py: + jayeshthk: 18 + aider/io.py: + Paul Gauthier: 1 + Paul Gauthier (aider): 14 + Vamsi Talupula: 5 + aider/main.py: + Kyosuke Takayama: 1 + Makar Ivashko: 1 + Paul Gauthier: 3 + Vasil Markoukin (aider): 5 + omarcinkonis: 1 + aider/models.py: + Ali Ayas (claude-sonnet-4-20250514): 11 + Nimesh Ghelani: 3 + Paul Gauthier: 1 + Sebastian Estrella: 11 + Vincent Taverna: 32 + aider/queries/tree-sitter-language-pack/clojure-tags.scm: + Garrett Hopper: 7 + aider/queries/tree-sitter-language-pack/matlab-tags.scm: + Matthew Tofano: 4 + aider/queries/tree-sitter-languages/matlab-tags.scm: + Matthew Tofano: 4 + aider/repo.py: + Kyosuke Takayama: 3 + Luke Reeves: 13 + Paul Gauthier: 2 + muravvv: 12 + aider/repomap.py: + Garrett Hopper: 2 + aider/resources/model-settings.yml: + Andrew Grigorev: 7 + Leon Mergen: 20 + Nimesh Ghelani: 15 + Paul Gauthier: 1 + Paul Gauthier (aider): 21 + Trung Dinh: 8 + Wietse Venema: 9 + therealmarv: 14 + aider/utils.py: + Paul Gauthier (aider): 7 + aider/website/docs/leaderboards/index.md: + Paul Gauthier: 1 + aider/website/index.html: + Paul Gauthier: 8 + Paul Gauthier (aider): 1 + benchmark/benchmark.py: + Paul Gauthier: 1 + tests/basic/test_commands.py: + Matteo Landi: 22 + tests/basic/test_history.py: + Paul Gauthier: 15 + tests/basic/test_main.py: + Kyosuke Takayama: 10 + Paul Gauthier: 3 + Paul Gauthier (aider): 64 + omarcinkonis: 41 + tests/basic/test_repo.py: + Luke Reeves: 31 + Paul Gauthier: 2 + muravvv: 22 + tests/basic/test_repomap.py: + Matthew Tofano: 3 + Paul Gauthier (aider): 3 + tests/fixtures/languages/clojure/test.clj: + Paul Gauthier (aider): 6 + tests/fixtures/languages/matlab/test.m: + Matthew Tofano: 42 + grand_total: + Ali Ayas (claude-sonnet-4-20250514): 17 + Andrew Grigorev: 7 + Emmanuel Ferdman: 1 + Garrett Hopper: 9 + Kyosuke Takayama: 23 + Leon Mergen: 20 + Luke Reeves: 44 + Makar Ivashko: 1 + Mathis Beer (aider): 1 + Matteo Landi: 38 + Matthew Tofano: 53 + Nimesh Ghelani: 18 + Paul Gauthier: 53 + Paul Gauthier (aider): 118 + Sebastian Estrella: 11 + Trung Dinh: 8 + Vamsi Talupula: 5 + Vasil Markoukin (aider): 20 + Vincent Taverna: 32 + Wietse Venema: 9 + jayeshthk: 18 + muravvv: 34 + omarcinkonis: 56 + therealmarv: 14 + start_tag: v0.84.0 + total_lines: 610 +- aider_percentage: 87.75 + aider_total: 222 + end_date: '2025-08-09' + end_tag: v0.86.0 + file_counts: + aider/__init__.py: + Paul Gauthier: 1 + aider/analytics.py: + Paul Gauthier (aider): 1 + aider/commands.py: + Paul Gauthier (aider): 7 + Zexin Yuan: 1 + aider/models.py: + Andrew Grigorev (aider): 3 + Paul Gauthier: 3 + Paul Gauthier (aider): 5 + aider/resources/model-settings.yml: + Jack Harrington: 7 + Paul Gauthier: 6 + Paul Gauthier (aider): 199 + Tamir Zahavi-Brunner: 7 + aider/website/_includes/leaderboard_table.js: + Paul Gauthier: 1 + aider/website/docs/leaderboards/index.md: + Paul Gauthier: 1 + aider/website/index.html: + Paul Gauthier: 3 + scripts/blame.py: + Paul Gauthier (aider): 7 + scripts/update-history.py: + Paul Gauthier: 1 + grand_total: + Andrew Grigorev (aider): 3 + Jack Harrington: 7 + Paul Gauthier: 16 + Paul Gauthier (aider): 219 + Tamir Zahavi-Brunner: 7 + Zexin Yuan: 1 + start_tag: v0.85.0 + total_lines: 253 diff --git a/aider/website/_data/polyglot_leaderboard.yml b/aider/website/_data/polyglot_leaderboard.yml index 5d7c651ae..1ddb905c4 100644 --- a/aider/website/_data/polyglot_leaderboard.yml +++ b/aider/website/_data/polyglot_leaderboard.yml @@ -831,7 +831,7 @@ date: 2025-04-12 versions: 0.81.3.dev seconds_per_case: 45.3 - total_cost: 6.3174 + total_cost: 0 # incorrect: 6.3174 - dirname: 2025-03-29-05-24-55--chatgpt4o-mar28-diff test_cases: 225 @@ -1093,32 +1093,6 @@ seconds_per_case: 12.0 total_cost: 0.4281 -- dirname: 2025-04-16-21-20-55--o3-high-diff-temp0-exsys - test_cases: 225 - model: o3 (high) - edit_format: diff - commit_hash: 24805ff-dirty - pass_rate_1: 36.9 - pass_rate_2: 79.6 - pass_num_1: 83 - pass_num_2: 179 - percent_cases_well_formed: 95.1 - error_outputs: 11 - num_malformed_responses: 11 - num_with_malformed_responses: 11 - user_asks: 110 - lazy_comments: 0 - syntax_errors: 0 - indentation_errors: 0 - exhausted_context_windows: 0 - test_timeouts: 2 - total_tests: 225 - command: aider --model o3 - date: 2025-04-16 - versions: 0.82.1.dev - seconds_per_case: 113.8 - total_cost: 111.0325 - - dirname: 2025-04-16-22-01-58--o4-mini-high-diff-exsys test_cases: 225 model: o4-mini (high) @@ -1145,34 +1119,6 @@ seconds_per_case: 176.5 total_cost: 19.6399 -- dirname: 2025-04-17-01-20-35--o3-mini-high-diff-arch - test_cases: 225 - model: o3 (high) + gpt-4.1 - edit_format: architect - commit_hash: 80909e1-dirty - editor_model: gpt-4.1 - editor_edit_format: editor-diff - pass_rate_1: 36.0 - pass_rate_2: 82.7 - pass_num_1: 81 - pass_num_2: 186 - percent_cases_well_formed: 100.0 - error_outputs: 9 - num_malformed_responses: 0 - num_with_malformed_responses: 0 - user_asks: 166 - lazy_comments: 0 - syntax_errors: 0 - indentation_errors: 0 - exhausted_context_windows: 0 - test_timeouts: 0 - total_tests: 225 - command: aider --model o3 --architect - date: 2025-04-17 - versions: 0.82.2.dev - seconds_per_case: 110.0 - total_cost: 69.2921 - - dirname: 2025-04-19-14-43-04--o4-mini-patch test_cases: 225 model: openhands-lm-32b-v0.1 @@ -1197,4 +1143,714 @@ date: 2025-04-19 versions: 0.82.2.dev seconds_per_case: 195.6 - total_cost: 0.0000 \ No newline at end of file + total_cost: 0.0000 + +- dirname: 2025-04-20-19-54-31--flash25-diff-no-think + test_cases: 225 + model: gemini-2.5-flash-preview-04-17 (default) + edit_format: diff + commit_hash: 7fcce5d-dirty + pass_rate_1: 21.8 + pass_rate_2: 47.1 + pass_num_1: 49 + pass_num_2: 106 + percent_cases_well_formed: 85.3 + error_outputs: 60 + num_malformed_responses: 55 + num_with_malformed_responses: 33 + user_asks: 82 + lazy_comments: 1 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 5 + test_timeouts: 4 + total_tests: 225 + command: aider --model gemini/gemini-2.5-flash-preview-04-17 + date: 2025-04-20 + versions: 0.82.3.dev + seconds_per_case: 50.1 + total_cost: 1.8451 + +- dirname: 2025-05-07-19-32-40--gemini0506-diff-fenced-completion_cost + test_cases: 225 + model: Gemini 2.5 Pro Preview 05-06 + edit_format: diff-fenced + commit_hash: 3b08327-dirty + pass_rate_1: 36.4 + pass_rate_2: 76.9 + pass_num_1: 82 + pass_num_2: 173 + percent_cases_well_formed: 97.3 + error_outputs: 15 + num_malformed_responses: 7 + num_with_malformed_responses: 6 + user_asks: 105 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + test_timeouts: 2 + total_tests: 225 + command: aider --model gemini/gemini-2.5-pro-preview-05-06 + date: 2025-05-07 + versions: 0.82.4.dev + seconds_per_case: 165.3 + total_cost: 37.4104 + +- dirname: 2025-05-08-03-20-24--qwen3-32b-default + test_cases: 225 + model: Qwen3 32B + edit_format: diff + commit_hash: aaacee5-dirty, aeaf259 + pass_rate_1: 14.2 + pass_rate_2: 40.0 + pass_num_1: 32 + pass_num_2: 90 + percent_cases_well_formed: 83.6 + error_outputs: 119 + num_malformed_responses: 50 + num_with_malformed_responses: 37 + user_asks: 97 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 12 + prompt_tokens: 317591 + completion_tokens: 120418 + test_timeouts: 5 + total_tests: 225 + command: aider --model openrouter/qwen/qwen3-32b + date: 2025-05-08 + versions: 0.82.4.dev + seconds_per_case: 372.2 + total_cost: 0.7603 + +- dirname: 2025-05-09-17-02-02--qwen3-235b-a22b.unthink_16k_diff + test_cases: 225 + model: Qwen3 235B A22B diff, no think, Alibaba API + edit_format: diff + commit_hash: 91d7fbd-dirty + pass_rate_1: 28.9 + pass_rate_2: 59.6 + pass_num_1: 65 + pass_num_2: 134 + percent_cases_well_formed: 92.9 + error_outputs: 22 + num_malformed_responses: 22 + num_with_malformed_responses: 16 + user_asks: 111 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2816192 + completion_tokens: 342062 + test_timeouts: 1 + total_tests: 225 + command: aider --model openai/qwen3-235b-a22b + date: 2025-05-09 + versions: 0.82.4.dev + seconds_per_case: 45.4 + total_cost: 0.0000 + +- dirname: 2025-05-24-21-17-54--sonnet4-diff-exuser + test_cases: 225 + model: claude-sonnet-4-20250514 (no thinking) + edit_format: diff + commit_hash: ef3f8bb-dirty + pass_rate_1: 20.4 + pass_rate_2: 56.4 + pass_num_1: 46 + pass_num_2: 127 + percent_cases_well_formed: 98.2 + error_outputs: 6 + num_malformed_responses: 4 + num_with_malformed_responses: 4 + user_asks: 129 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 1 + prompt_tokens: 3460663 + completion_tokens: 433373 + test_timeouts: 7 + total_tests: 225 + command: aider --model claude-sonnet-4-20250514 + date: 2025-05-24 + versions: 0.83.3.dev + seconds_per_case: 29.8 + total_cost: 15.8155 + +- dirname: 2025-05-24-22-10-36--sonnet4-diff-exuser-think32k + test_cases: 225 + model: claude-sonnet-4-20250514 (32k thinking) + edit_format: diff + commit_hash: e3cb907 + thinking_tokens: 32000 + pass_rate_1: 25.8 + pass_rate_2: 61.3 + pass_num_1: 58 + pass_num_2: 138 + percent_cases_well_formed: 97.3 + error_outputs: 10 + num_malformed_responses: 10 + num_with_malformed_responses: 6 + user_asks: 111 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2863068 + completion_tokens: 1271074 + test_timeouts: 6 + total_tests: 225 + command: aider --model claude-sonnet-4-20250514 + date: 2025-05-24 + versions: 0.83.3.dev + seconds_per_case: 79.9 + total_cost: 26.5755 + +- dirname: 2025-05-25-19-57-20--opus4-diff-exuser + test_cases: 225 + model: claude-opus-4-20250514 (no think) + edit_format: diff + commit_hash: 9ef3211 + pass_rate_1: 32.9 + pass_rate_2: 70.7 + pass_num_1: 74 + pass_num_2: 159 + percent_cases_well_formed: 98.7 + error_outputs: 3 + num_malformed_responses: 3 + num_with_malformed_responses: 3 + user_asks: 105 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2671437 + completion_tokens: 380717 + test_timeouts: 3 + total_tests: 225 + command: aider --model claude-opus-4-20250514 + date: 2025-05-25 + versions: 0.83.3.dev + seconds_per_case: 42.5 + total_cost: 68.6253 + +- dirname: 2025-05-25-20-40-51--opus4-diff-exuser + test_cases: 225 + model: claude-opus-4-20250514 (32k thinking) + edit_format: diff + commit_hash: 9ef3211 + thinking_tokens: 32000 + pass_rate_1: 37.3 + pass_rate_2: 72.0 + pass_num_1: 84 + pass_num_2: 162 + percent_cases_well_formed: 97.3 + error_outputs: 10 + num_malformed_responses: 6 + num_with_malformed_responses: 6 + user_asks: 97 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2567514 + completion_tokens: 363142 + test_timeouts: 4 + total_tests: 225 + command: aider --model claude-opus-4-20250514 + date: 2025-05-25 + versions: 0.83.3.dev + seconds_per_case: 44.1 + total_cost: 65.7484 + +- dirname: 2025-05-26-15-56-31--flash25-05-20-24k-think # dirname is misleading + test_cases: 225 + model: gemini-2.5-flash-preview-05-20 (no think) + edit_format: diff + commit_hash: 214b811-dirty + thinking_tokens: 0 # <-- no thinking + pass_rate_1: 20.9 + pass_rate_2: 44.0 + pass_num_1: 47 + pass_num_2: 99 + percent_cases_well_formed: 93.8 + error_outputs: 16 + num_malformed_responses: 16 + num_with_malformed_responses: 14 + user_asks: 79 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 5512458 + completion_tokens: 514145 + test_timeouts: 4 + total_tests: 225 + command: aider --model gemini/gemini-2.5-flash-preview-05-20 + date: 2025-05-26 + versions: 0.83.3.dev + seconds_per_case: 12.2 + total_cost: 1.1354 + +- dirname: 2025-05-25-22-58-44--flash25-05-20-24k-think + test_cases: 225 + model: gemini-2.5-flash-preview-05-20 (24k think) + edit_format: diff + commit_hash: a8568c3-dirty + thinking_tokens: 24576 + pass_rate_1: 26.2 + pass_rate_2: 55.1 + pass_num_1: 59 + pass_num_2: 124 + percent_cases_well_formed: 95.6 + error_outputs: 15 + num_malformed_responses: 15 + num_with_malformed_responses: 10 + user_asks: 101 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 3666792 + completion_tokens: 2703162 + test_timeouts: 4 + total_tests: 225 + command: aider --model gemini/gemini-2.5-flash-preview-05-20 + date: 2025-05-25 + versions: 0.83.3.dev + seconds_per_case: 53.9 + total_cost: 8.5625 + +- dirname: 2025-06-06-18-38-56--gemini0605-diff-fenced + test_cases: 225 + model: gemini-2.5-pro-preview-06-05 (default think) + edit_format: diff-fenced + commit_hash: 4c161f9-dirty + pass_rate_1: 44.9 + pass_rate_2: 79.1 + pass_num_1: 101 + pass_num_2: 178 + percent_cases_well_formed: 100.0 + error_outputs: 4 + num_malformed_responses: 0 + num_with_malformed_responses: 0 + user_asks: 105 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 4 + prompt_tokens: 2751296 + completion_tokens: 4142197 + test_timeouts: 1 + total_tests: 225 + command: aider --model gemini/gemini-2.5-pro-preview-06-05 + date: 2025-06-06 + versions: 0.84.1.dev + seconds_per_case: 175.2 + total_cost: 45.5961 + +- dirname: 2025-06-06-16-36-21--gemini0605-32k-think-diff-fenced + test_cases: 225 + model: gemini-2.5-pro-preview-06-05 (32k think) + edit_format: diff-fenced + commit_hash: f827f22 + thinking_tokens: 32768 + pass_rate_1: 46.2 + pass_rate_2: 83.1 + pass_num_1: 104 + pass_num_2: 187 + percent_cases_well_formed: 99.6 + error_outputs: 1 + num_malformed_responses: 1 + num_with_malformed_responses: 1 + user_asks: 112 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2719961 + completion_tokens: 4648227 + test_timeouts: 0 + total_tests: 225 + command: aider --model gemini/gemini-2.5-pro-preview-06-05 --thinking-tokens 32k + date: 2025-06-06 + versions: 0.84.1.dev + seconds_per_case: 200.3 + total_cost: 49.8822 + +- dirname: 2025-06-06-16-47-07--r1-diff + test_cases: 224 + model: DeepSeek R1 (0528) + edit_format: diff + commit_hash: 4c161f9-dirty + pass_rate_1: 34.4 + pass_rate_2: 71.4 + pass_num_1: 77 + pass_num_2: 160 + percent_cases_well_formed: 94.6 + error_outputs: 28 + num_malformed_responses: 15 + num_with_malformed_responses: 12 + user_asks: 105 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2644169 + completion_tokens: 1842168 + test_timeouts: 2 + total_tests: 225 + command: aider --model deepseek/deepseek-reasoner + date: 2025-06-06 + versions: 0.84.1.dev + seconds_per_case: 716.6 + total_cost: 4.8016 + +- dirname: 2025-06-25-21-04-24--o3-price-reduction-high + test_cases: 225 + model: o3 (high) + edit_format: diff + commit_hash: c48fea6 + reasoning_effort: high + pass_rate_1: 40.0 + pass_rate_2: 81.3 + pass_num_1: 90 + pass_num_2: 183 + percent_cases_well_formed: 94.7 + error_outputs: 25 + num_malformed_responses: 23 + num_with_malformed_responses: 12 + user_asks: 116 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 1 + prompt_tokens: 3148932 + completion_tokens: 2047615 + test_timeouts: 2 + total_tests: 225 + command: aider --model o3 --reasoning-effort high + date: 2025-06-25 + versions: 0.84.1.dev + seconds_per_case: 197.3 + total_cost: 21.2259 + +- dirname: 2025-06-25-20-30-16--o3-price-reduction + test_cases: 225 + model: o3 + edit_format: diff + commit_hash: c48fea6 + pass_rate_1: 40.9 + pass_rate_2: 76.9 + pass_num_1: 92 + pass_num_2: 173 + percent_cases_well_formed: 93.8 + error_outputs: 22 + num_malformed_responses: 22 + num_with_malformed_responses: 14 + user_asks: 108 + lazy_comments: 2 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2893189 + completion_tokens: 1154767 + test_timeouts: 1 + total_tests: 225 + command: aider --model o3 + date: 2025-06-25 + versions: 0.84.1.dev + seconds_per_case: 101.7 + total_cost: 13.7517 + +- dirname: 2025-06-27-23-53-57--o3-mini-high-diff-arch + test_cases: 224 + model: o3 (high) + gpt-4.1 + edit_format: architect + commit_hash: 4f4f00f-dirty + editor_model: gpt-4.1 + editor_edit_format: editor-diff + reasoning_effort: high + pass_rate_1: 34.8 + pass_rate_2: 78.2 + pass_num_1: 78 + pass_num_2: 176 + percent_cases_well_formed: 100.0 + error_outputs: 18 + num_malformed_responses: 0 + num_with_malformed_responses: 0 + user_asks: 172 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 1 + prompt_tokens: 1306877 + completion_tokens: 1327154 + test_timeouts: 1 + total_tests: 225 + command: aider --model o3 + date: 2025-06-27 + versions: 0.85.1.dev + seconds_per_case: 121.8 + total_cost: 17.5518 + +- dirname: 2025-06-28-00-38-18--o3-pro-high + test_cases: 225 + model: o3-pro (high) + edit_format: diff + commit_hash: 5318380 + reasoning_effort: high + pass_rate_1: 43.6 + pass_rate_2: 84.9 + pass_num_1: 98 + pass_num_2: 191 + percent_cases_well_formed: 97.8 + error_outputs: 20 + num_malformed_responses: 8 + num_with_malformed_responses: 5 + user_asks: 100 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2372636 + completion_tokens: 1235902 + test_timeouts: 1 + total_tests: 225 + command: aider --model o3-pro + date: 2025-06-28 + versions: 0.85.1.dev + seconds_per_case: 449.0 + total_cost: 146.3249 + +- dirname: 2025-07-11-19-37-40--xai-or-grok4-high + test_cases: 225 + model: grok-4 (high) + edit_format: diff + commit_hash: f7870b6-dirty + reasoning_effort: high + pass_rate_1: 40.9 + pass_rate_2: 79.6 + pass_num_1: 92 + pass_num_2: 179 + percent_cases_well_formed: 97.3 + error_outputs: 11 + num_malformed_responses: 8 + num_with_malformed_responses: 6 + user_asks: 133 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2815347 + completion_tokens: 3411480 + test_timeouts: 0 + total_tests: 225 + command: aider --model openrouter/x-ai/grok-4 + date: 2025-07-11 + versions: 0.85.2.dev + seconds_per_case: 403.2 + total_cost: 59.6182 + +- dirname: 2025-07-17-17-41-54--kimi-k2-diff-or-pricing + test_cases: 225 + model: Kimi K2 + edit_format: diff + commit_hash: 915ebff-dirty + pass_rate_1: 20.4 + pass_rate_2: 59.1 + pass_num_1: 46 + pass_num_2: 133 + percent_cases_well_formed: 92.9 + error_outputs: 19 + num_malformed_responses: 19 + num_with_malformed_responses: 16 + user_asks: 61 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2355141 + completion_tokens: 363846 + test_timeouts: 4 + total_tests: 225 + command: aider --model openrouter/moonshotai/kimi-k2 + date: 2025-07-17 + versions: 0.85.3.dev + seconds_per_case: 67.6 + total_cost: 1.2357 + +- dirname: 2025-08-06-04-54-48--gpt-oss-120b-high-polyglot + test_cases: 225 + model: gpt-oss-120b (high) + edit_format: diff + commit_hash: 1af0e59 + pass_rate_1: 13.8 + pass_rate_2: 41.8 + pass_num_1: 31 + pass_num_2: 94 + percent_cases_well_formed: 79.1 + error_outputs: 95 + num_malformed_responses: 77 + num_with_malformed_responses: 47 + user_asks: 142 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 3123768 + completion_tokens: 856495 + test_timeouts: 4 + total_tests: 225 + command: aider --model openrouter/openai/gpt-oss-120b --reasoning-effort high + date: 2025-08-06 + versions: 0.85.3.dev + seconds_per_case: 35.5 + total_cost: 0.7406 + +- dirname: 2025-08-23-15-47-21--gpt-5-high + test_cases: 225 + model: gpt-5 (high) + edit_format: diff + commit_hash: 32faf82 + reasoning_effort: high + pass_rate_1: 52.0 + pass_rate_2: 88.0 + pass_num_1: 117 + pass_num_2: 198 + percent_cases_well_formed: 91.6 + error_outputs: 23 + num_malformed_responses: 22 + num_with_malformed_responses: 19 + user_asks: 96 + lazy_comments: 3 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2675561 + completion_tokens: 2623429 + test_timeouts: 3 + total_tests: 225 + command: aider --model openai/gpt-5 + date: 2025-08-23 + versions: 0.86.2.dev + seconds_per_case: 194.0 + total_cost: 29.0829 + +- dirname: 2025-08-25-13-23-27--gpt-5-medium + test_cases: 225 + model: gpt-5 (medium) + edit_format: diff + commit_hash: 32faf82 + reasoning_effort: medium + pass_rate_1: 49.8 + pass_rate_2: 86.7 + pass_num_1: 112 + pass_num_2: 195 + percent_cases_well_formed: 88.4 + error_outputs: 40 + num_malformed_responses: 40 + num_with_malformed_responses: 26 + user_asks: 102 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2827261 + completion_tokens: 1468799 + test_timeouts: 0 + total_tests: 225 + command: aider --model openai/gpt-5 + date: 2025-08-25 + versions: 0.86.2.dev + seconds_per_case: 118.7 + total_cost: 17.6930 + +- dirname: 2025-08-25-14-16-37--gpt-5-low + test_cases: 225 + model: gpt-5 (low) + edit_format: diff + commit_hash: 32faf82 + reasoning_effort: low + pass_rate_1: 43.1 + pass_rate_2: 81.3 + pass_num_1: 97 + pass_num_2: 183 + percent_cases_well_formed: 86.7 + error_outputs: 46 + num_malformed_responses: 46 + num_with_malformed_responses: 30 + user_asks: 113 + lazy_comments: 1 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2534059 + completion_tokens: 779568 + test_timeouts: 1 + total_tests: 225 + command: aider --model openai/gpt-5 + date: 2025-08-25 + versions: 0.86.2.dev + seconds_per_case: 62.4 + total_cost: 10.3713 + +- dirname: 2025-10-03-09-45-34--deepseek-v3.2-reasoner + test_cases: 225 + model: DeepSeek-V3.2-Exp (Reasoner) + edit_format: diff + commit_hash: cbb5376 + pass_rate_1: 39.6 + pass_rate_2: 74.2 + pass_num_1: 89 + pass_num_2: 167 + percent_cases_well_formed: 97.3 + error_outputs: 8 + num_malformed_responses: 6 + num_with_malformed_responses: 6 + user_asks: 67 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 1 + prompt_tokens: 2191446 + completion_tokens: 1645129 + test_timeouts: 1 + total_tests: 225 + command: aider --model deepseek/deepseek-reasoner + date: 2025-10-03 + versions: 0.86.2.dev + seconds_per_case: 291.2 + total_cost: 1.3045 + +- dirname: 2025-10-03-09-21-36--deepseek-v3.2-chat + test_cases: 225 + model: DeepSeek-V3.2-Exp (Chat) + edit_format: diff + commit_hash: cbb5376 + pass_rate_1: 38.7 + pass_rate_2: 70.2 + pass_num_1: 87 + pass_num_2: 158 + percent_cases_well_formed: 98.2 + error_outputs: 6 + num_malformed_responses: 4 + num_with_malformed_responses: 4 + user_asks: 60 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 1 + prompt_tokens: 2266868 + completion_tokens: 573477 + test_timeouts: 4 + total_tests: 225 + command: aider --model deepseek/deepseek-chat + date: 2025-10-03 + versions: 0.86.2.dev + seconds_per_case: 104.0 + total_cost: 0.8756 diff --git a/aider/website/_data/qwen3_leaderboard.yml b/aider/website/_data/qwen3_leaderboard.yml new file mode 100644 index 000000000..68233c26f --- /dev/null +++ b/aider/website/_data/qwen3_leaderboard.yml @@ -0,0 +1,272 @@ +- dirname: 2025-05-08-03-20-24--qwen3-32b-default + test_cases: 225 + model: Qwen3 32B diff on OpenRouter, all providers, default settings (thinking) + edit_format: diff + commit_hash: aaacee5-dirty, aeaf259 + pass_rate_1: 14.2 + pass_rate_2: 40.0 + pass_num_1: 32 + pass_num_2: 90 + percent_cases_well_formed: 83.6 + error_outputs: 119 + num_malformed_responses: 50 + num_with_malformed_responses: 37 + user_asks: 97 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 12 + prompt_tokens: 317591 + completion_tokens: 120418 + test_timeouts: 5 + total_tests: 225 + command: aider --model openrouter/qwen/qwen3-32b + date: 2025-05-08 + versions: 0.82.4.dev + seconds_per_case: 372.2 + total_cost: 0.7603 + +- dirname: 2025-05-08-03-22-37--qwen3-235b-defaults + test_cases: 225 + model: Qwen3 235B A22B diff on OpenRouter, all providers, default settings (thinking) + edit_format: diff + commit_hash: aaacee5-dirty + pass_rate_1: 17.3 + pass_rate_2: 49.8 + pass_num_1: 39 + pass_num_2: 112 + percent_cases_well_formed: 91.6 + error_outputs: 58 + num_malformed_responses: 29 + num_with_malformed_responses: 19 + user_asks: 102 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 0 + completion_tokens: 0 + test_timeouts: 1 + total_tests: 225 + command: aider --model openrouter/qwen/qwen3-235b-a22b + date: 2025-05-08 + versions: 0.82.4.dev + seconds_per_case: 428.1 + total_cost: 1.8037 + + +- dirname: 2025-05-08-17-39-14--qwen3-235b-or-together-only + test_cases: 225 + model: Qwen3 235B A22B diff on OpenRouter only TogetherAI, recommended /no_think settings + edit_format: diff + commit_hash: 328584e + pass_rate_1: 28.0 + pass_rate_2: 54.7 + pass_num_1: 63 + pass_num_2: 123 + percent_cases_well_formed: 90.7 + error_outputs: 39 + num_malformed_responses: 32 + num_with_malformed_responses: 21 + user_asks: 106 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2816606 + completion_tokens: 362346 + test_timeouts: 2 + total_tests: 225 + command: aider --model openrouter/qwen/qwen3-235b-a22b + date: 2025-05-08 + versions: 0.82.4.dev + seconds_per_case: 77.2 + total_cost: 0.6399 + + +- dirname: 2025-04-30-04-49-37--Qwen3-235B-A22B-whole-nothink + test_cases: 225 + model: Qwen3-235B-A22B whole with VLLM, bfloat16, recommended /no_think settings + edit_format: whole + commit_hash: 0c383df-dirty + pass_rate_1: 28.0 + pass_rate_2: 65.3 + pass_num_1: 63 + pass_num_2: 147 + percent_cases_well_formed: 100.0 + error_outputs: 3 + num_malformed_responses: 0 + num_with_malformed_responses: 0 + user_asks: 166 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 3 + test_timeouts: 0 + total_tests: 225 + command: aider --model openai/Qwen3-235B-A22B + date: 2025-04-30 + versions: 0.81.4.dev + seconds_per_case: 166.0 + total_cost: 0.0000 + +- dirname: 2025-04-30-04-49-50--Qwen3-235B-A22B-diff-nothink + test_cases: 225 + model: Qwen3-235B-A22B diff with VLLM, bfloat16, recommended /no_think settings + edit_format: diff + commit_hash: 0c383df-dirty + pass_rate_1: 29.8 + pass_rate_2: 61.3 + pass_num_1: 67 + pass_num_2: 138 + percent_cases_well_formed: 94.7 + error_outputs: 25 + num_malformed_responses: 25 + num_with_malformed_responses: 12 + user_asks: 97 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + test_timeouts: 2 + total_tests: 225 + command: aider --model openai/Qwen3-235B-A22B + date: 2025-04-30 + versions: 0.81.4.dev + seconds_per_case: 158.2 + total_cost: 0.0000 + +- dirname: 2025-04-30-04-08-41--Qwen3-32B-whole-nothink + test_cases: 225 + model: Qwen3-32B whole with VLLM, bfloat16, recommended /no_think settings + edit_format: whole + commit_hash: 0c383df-dirty + pass_rate_1: 20.4 + pass_rate_2: 45.8 + pass_num_1: 46 + pass_num_2: 103 + percent_cases_well_formed: 100.0 + error_outputs: 3 + num_malformed_responses: 0 + num_with_malformed_responses: 0 + user_asks: 94 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 3 + test_timeouts: 5 + total_tests: 225 + command: aider --model openai/Qwen3-32B + date: 2025-04-30 + versions: 0.81.4.dev + seconds_per_case: 48.1 + total_cost: 0.0000 + +- dirname: 2025-04-30-04-08-51--Qwen3-32B-diff-nothink + test_cases: 225 + model: Qwen3-32B diff with VLLM, bfloat16, recommended /no_think settings + edit_format: diff + commit_hash: 0c383df-dirty + pass_rate_1: 20.4 + pass_rate_2: 41.3 + pass_num_1: 46 + pass_num_2: 93 + percent_cases_well_formed: 94.2 + error_outputs: 17 + num_malformed_responses: 14 + num_with_malformed_responses: 13 + user_asks: 83 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 3 + test_timeouts: 4 + total_tests: 225 + command: aider --model openai/Qwen3-32B + date: 2025-04-30 + versions: 0.81.4.dev + seconds_per_case: 59.4 + total_cost: 0.0000 + +- dirname: 2025-05-07-03-15-59--Qwen3-235B-A22B-Q5_K_M-whole-nothink + test_cases: 225 + model: Qwen3-235B-A22B whole with llama.cpp, Q5_K_M (unsloth), recommended /no_think settings + edit_format: whole + commit_hash: 8159cbf + pass_rate_1: 27.1 + pass_rate_2: 59.1 + pass_num_1: 61 + pass_num_2: 133 + percent_cases_well_formed: 100.0 + error_outputs: 1 + num_malformed_responses: 0 + num_with_malformed_responses: 0 + user_asks: 169 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + test_timeouts: 1 + total_tests: 225 + command: aider --model openai/Qwen3-235B-A22B-Q5_K_M + date: 2025-05-07 + versions: 0.82.4.dev + seconds_per_case: 635.2 + total_cost: 0.0000 + + +- dirname: 2025-05-09-17-02-02--qwen3-235b-a22b.unthink_16k_diff + test_cases: 225 + model: Qwen3 235B A22B diff, no think, via official Alibaba API + edit_format: diff + commit_hash: 91d7fbd-dirty + pass_rate_1: 28.9 + pass_rate_2: 59.6 + pass_num_1: 65 + pass_num_2: 134 + percent_cases_well_formed: 92.9 + error_outputs: 22 + num_malformed_responses: 22 + num_with_malformed_responses: 16 + user_asks: 111 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2816192 + completion_tokens: 342062 + test_timeouts: 1 + total_tests: 225 + command: aider --model openai/qwen3-235b-a22b + date: 2025-05-09 + versions: 0.82.4.dev + seconds_per_case: 45.4 + total_cost: 0.0000 + +- dirname: 2025-05-09-23-01-22--qwen3-235b-a22b.unthink_16k_whole + test_cases: 225 + model: Qwen3 235B A22B whole, no think, via official Alibaba API + edit_format: whole + commit_hash: 425fb6d + pass_rate_1: 26.7 + pass_rate_2: 61.8 + pass_num_1: 60 + pass_num_2: 139 + percent_cases_well_formed: 100.0 + error_outputs: 0 + num_malformed_responses: 0 + num_with_malformed_responses: 0 + user_asks: 175 + lazy_comments: 0 + syntax_errors: 0 + indentation_errors: 0 + exhausted_context_windows: 0 + prompt_tokens: 2768173 + completion_tokens: 384000 + test_timeouts: 1 + total_tests: 225 + command: aider --model openai/qwen3-235b-a22b + date: 2025-05-09 + versions: 0.82.4.dev + seconds_per_case: 50.8 + total_cost: 0.0000 \ No newline at end of file diff --git a/aider/website/_includes/blame.md b/aider/website/_includes/blame.md index 61758a7db..e1b75a431 100644 --- a/aider/website/_includes/blame.md +++ b/aider/website/_includes/blame.md @@ -27,7 +27,7 @@ document.addEventListener('DOMContentLoaded', function () { labels: labels, datasets: [{ label: 'Aider\'s percent of new code by release', - data: [{% for row in site.data.blame %}{ x: '{{ row.end_tag }}', y: {{ row.aider_percentage }}, lines: {{ row.aider_total }} },{% endfor %}], + data: [{% for row in site.data.blame %}{ x: '{{ row.end_tag }}', y: {{ row.aider_percentage }}, lines: {{ row.aider_total }}, end_date: '{{ row.end_date }}' },{% endfor %}], backgroundColor: 'rgba(54, 162, 235, 0.8)', borderColor: 'rgba(54, 162, 235, 1)', borderWidth: 1 @@ -88,6 +88,10 @@ document.addEventListener('DOMContentLoaded', function () { var value = context.parsed.y || 0; var lines = context.raw.lines || 0; return `${label}: ${Math.round(value)}% (${lines} lines)`; + }, + afterLabel: function(context) { + let date = context.raw.end_date || 'n/a'; + return `Date: ` + date; } } }, diff --git a/aider/website/_includes/footer_custom.html b/aider/website/_includes/footer_custom.html new file mode 100644 index 000000000..e69de29bb diff --git a/aider/website/_includes/get-started.md b/aider/website/_includes/get-started.md index d5d3ff8c6..eb15d2797 100644 --- a/aider/website/_includes/get-started.md +++ b/aider/website/_includes/get-started.md @@ -1,10 +1,13 @@ -If you already have python 3.8-3.13 installed, you can get started quickly like this: +If you already have python 3.8-3.13 installed, you can get started quickly like this. + +First, install aider: + +{% include install.md %} + +Start working with aider on your codebase: ```bash -python -m pip install aider-install -aider-install - # Change directory into your codebase cd /to/your/project diff --git a/aider/website/_includes/head_custom.html b/aider/website/_includes/head_custom.html index 20f888728..364a5e1f8 100644 --- a/aider/website/_includes/head_custom.html +++ b/aider/website/_includes/head_custom.html @@ -32,6 +32,11 @@ .side-bar { background: linear-gradient(135deg, #ffffff 0%, rgba(20, 176, 20, 0.01) 25%, rgba(20, 176, 20, 0.04) 40%, rgba(220, 230, 255, 0.4) 60%, rgba(205, 218, 255, 0.4) 80%, #F5F6FA 100%); } + + @media (max-width: 50em) { + .ea-ad--sidebar { display: none; } + .ea-ad--mobile { display: block; } + } diff --git a/aider/website/_includes/help.md b/aider/website/_includes/help.md index 661af1043..f28a48273 100644 --- a/aider/website/_includes/help.md +++ b/aider/website/_includes/help.md @@ -2,7 +2,7 @@ If you need more help, please check our [GitHub issues](https://github.com/Aider-AI/aider/issues) and file a new issue if your problem isn't discussed. Or drop into our -[Discord](https://discord.gg/Tv2uQnR88V) +[Discord](https://discord.gg/Y7X7bhMQFV) to chat with us. When reporting problems, it is very helpful if you can provide: diff --git a/aider/website/_includes/install.md b/aider/website/_includes/install.md new file mode 100644 index 000000000..f42be5656 --- /dev/null +++ b/aider/website/_includes/install.md @@ -0,0 +1,5 @@ + +```bash +python -m pip install aider-install +aider-install +``` diff --git a/aider/website/_includes/leaderboard_table.js b/aider/website/_includes/leaderboard_table.js index 8f9f40a82..039d6e121 100644 --- a/aider/website/_includes/leaderboard_table.js +++ b/aider/website/_includes/leaderboard_table.js @@ -1,7 +1,7 @@ document.addEventListener('DOMContentLoaded', function() { let currentMode = 'view'; // 'view', 'select', 'detail' let selectedRows = new Set(); // Store indices of selected rows - const MAX_DISPLAY_COST_CAP = 75; // Define the constant here + const MAX_DISPLAY_COST_CAP = 200; // Define the constant here const allMainRows = document.querySelectorAll('tr[id^="main-row-"]'); const allDetailsRows = document.querySelectorAll('tr[id^="details-"]'); @@ -188,10 +188,15 @@ document.addEventListener('DOMContentLoaded', function() { // Update the leaderboard title based on mode and selection if (leaderboardTitle) { - if (currentMode === 'view' && selectedRows.size > 0) { - leaderboardTitle.textContent = filteredTitle; + // Check if a custom title is provided globally + if (typeof LEADERBOARD_CUSTOM_TITLE !== 'undefined' && LEADERBOARD_CUSTOM_TITLE) { + leaderboardTitle.textContent = LEADERBOARD_CUSTOM_TITLE; } else { - leaderboardTitle.textContent = defaultTitle; + if (currentMode === 'view' && selectedRows.size > 0) { + leaderboardTitle.textContent = filteredTitle; + } else { + leaderboardTitle.textContent = defaultTitle; + } } } diff --git a/aider/website/_includes/nav_footer_custom.html b/aider/website/_includes/nav_footer_custom.html index 7c15832fa..bc2b06268 100644 --- a/aider/website/_includes/nav_footer_custom.html +++ b/aider/website/_includes/nav_footer_custom.html @@ -3,5 +3,5 @@ Aider is on GitHub and - Discord. + Discord. diff --git a/aider/website/_posts/2024-05-13-models-over-time.md b/aider/website/_posts/2024-05-13-models-over-time.md index 7b2bbdf3e..57cc08f89 100644 --- a/aider/website/_posts/2024-05-13-models-over-time.md +++ b/aider/website/_posts/2024-05-13-models-over-time.md @@ -15,12 +15,12 @@ nav_exclude: true I recently wanted to draw a graph showing how LLM code editing skill has been changing over time as new models have been released by OpenAI, Anthropic and others. I have all the -[data in a yaml file](https://github.com/Aider-AI/aider/blob/main/website/_data/edit_leaderboard.yml) that is used to render +[data in a YAML file](https://github.com/Aider-AI/aider/blob/main/website/_data/edit_leaderboard.yml) that is used to render [aider's LLM leaderboards](https://aider.chat/docs/leaderboards/). Below is the aider chat transcript, which shows: -- I launch aider with the yaml file, a file with other plots I've done recently (so GPT can crib the style) and an empty file called `over_time.py`. +- I launch aider with the YAML file, a file with other plots I've done recently (so GPT can crib the style) and an empty file called `over_time.py`. - Then I ask GPT to draw the scatterplot I want. - I run the resulting script and share the error output with GPT so it can fix a small bug. - I ask it to color the points for GPT-4 and GPT-3.5 family models differently, to better see trends within those model families. @@ -28,7 +28,7 @@ Below is the aider chat transcript, which shows: - I work through a series of other small style changes, like changing fonts and the graph border. In the end I have the graph, but I also have the python code in my repo. -So I can update this graph easily whenever I add new entries to the yaml data file. +So I can update this graph easily whenever I add new entries to the YAML data file. ## Aider chat transcript diff --git a/aider/website/_posts/2025-05-07-gemini-cost.md b/aider/website/_posts/2025-05-07-gemini-cost.md new file mode 100644 index 000000000..32c9d9041 --- /dev/null +++ b/aider/website/_posts/2025-05-07-gemini-cost.md @@ -0,0 +1,114 @@ +--- +title: Gemini 2.5 Pro Preview 03-25 benchmark cost +excerpt: The $6.32 benchmark cost reported for Gemini 2.5 Pro Preview 03-25 was incorrect. +draft: false +nav_exclude: true +--- +{% if page.date %} + +{% endif %} + +# Gemini 2.5 Pro Preview 03-25 benchmark cost + +## Summary +The $6.32 cost reported to run the aider polyglot benchmark on +Gemini 2.5 Pro Preview 03-25 was incorrect. +The true cost was higher, possibly significantly so. +The incorrect cost has been removed from the leaderboard. + +An investigation determined the primary cause was that the litellm +package (used by aider for LLM API connections) was not properly including reasoning tokens in +the token counts it reported. +While an incorrect price-per-token entry for the model also existed in litellm's cost +database at that time, this was found not to be a contributing factor. +Aider's own internal, correct pricing data was utilized during the benchmark. + +## Resolution + +Litellm began correctly including reasoning tokens in the reported counts +on April 21, 2025 in +commit [a7db0df](https://github.com/BerriAI/litellm/commit/a7db0df0434bfbac2b68ebe1c343b77955becb4b). +This change was released in litellm v1.67.1. +Aider picked up this change April 28, 2025 when it upgraded its litellm dependency +from v1.65.7 to v1.67.4.post1 +in commit [9351f37](https://github.com/Aider-AI/aider/commit/9351f37). +That dependency change shipped on May 5, 2025 in aider v0.82.3. + +Unfortunately the 03-25 version of Gemini 2.5 Pro Preview is no longer available, +so it is not possible to re-run the benchmark to obtain an accurate cost. +As a possibly relevant comparison, the newer 05-06 version of Gemini 2.5 Pro Preview +completed the benchmark at a cost of about $37. + +## Investigation detail + +The version of litellm available at that time of the benchmark appears to have been +excluding reasoning tokens from the token counts it reported. +So even though aider had correct per-token pricing, it did not have the correct token counts +used during the benchmark. +This resulted in an underestimate of the benchmark costs. + +The incorrect litellm database entry does not appear to have affected the aider benchmark costs. +Aider maintains and uses its own database of costs for some models, and it contained +the correct pricing at the time of the benchmark. +Aider appears to have +loaded the correct cost data from its database and made use of it during the benchmark. + +Every aider benchmark report contains the git commit hash of the aider repository state used to +run the benchmark. +The +[benchmark run in question](https://github.com/Aider-AI/aider/blob/edbfec0ce4e1fe86735c915cb425b0d8636edc32/aider/website/_data/polyglot_leaderboard.yml#L814) +was built from +commit [0282574](https://github.com/Aider-AI/aider/commit/0282574). + +Additional runs of the benchmark from that build verified that the error in litellm's +model cost database appears not to have been a factor: + +- Aider's internal model database correctly overrides the litellm database, which contained an incorrect token cost at the time. +- The correct pricing is loaded from aider's internal model database and produces similar (incorrect) costs as the original run. +- Updating aider's internal model database with an absurdly high token cost resulted in an appropriately high benchmark cost report, demonstrating that the internal database costs were in effect. + +This specific build of aider was then updated with various versions of litellm using `git biset` +to identify the first litellm commit where reasoning tokens counts were correctly reported. + + + +## Timeline + +Below is the full timeline of git commits related to this issue in the aider and litellm repositories. +Each entry has a UTC timestamp, followed by the original literal timestamp obtained from the +relevant source. + +- 2025-04-04 19:54:45 UTC (Sat Apr 5 08:54:45 2025 +1300) + - Correct value `"output_cost_per_token": 0.000010` for `gemini/gemini-2.5-pro-preview-03-25` added to `aider/resources/model-metadata.json` + - Commit [eda796d](https://github.com/Aider-AI/aider/commit/eda796d) in aider. + +- 2025-04-05 16:20:01 UTC (Sun Apr 6 00:20:01 2025 +0800) + - First litellm commit of `gemini/gemini-2.5-pro-preview-03-25` metadata, with incorrect price `"output_cost_per_token": 0.0000010` + - Commit [cd0a1e6](https://github.com/BerriAI/litellm/commit/cd0a1e6) in litellm. + +- 2025-04-10 01:48:43 UTC (Wed Apr 9 18:48:43 2025 -0700) + - litellm commit updates `gemini/gemini-2.5-pro-preview-03-25` metadata, but not price + - Commit [ac4f32f](https://github.com/BerriAI/litellm/commit/ac4f32f) in litellm. + +- 2025-04-12 04:55:50 UTC (2025-04-12-04-55-50 UTC) + - Benchmark performed. + - Aider repo hash [0282574 recorded in benchmark results](https://github.com/Aider-AI/aider/blob/7fbeafa1cfd4ad83f7499417837cdfa6b16fe7a1/aider/website/_data/polyglot_leaderboard.yml#L814), without a "dirty" annotation, indicating that the benchmark was run on a clean checkout of the aider repo at commit [0282574](https://github.com/Aider-AI/aider/commit/0282574). + - Correct value `"output_cost_per_token": 0.000010` is in `aider/resources/model-metadata.json` at this commit [0282574](https://github.com/Aider-AI/aider/blob/0282574/aider/resources/model-metadata.json#L357). + +- 2025-04-12 15:06:39 UTC (Apr 12 08:06:39 2025 -0700) + - Benchmark results added to aider repo. + - Commit [7fbeafa](https://github.com/Aider-AI/aider/commit/7fbeafa) in aider. + +- 2025-04-12 15:20:04 UTC (Sat Apr 12 19:20:04 2025 +0400) + - litellm commit fixes `gemini/gemini-2.5-pro-preview-03-25` price metadata to `"output_cost_per_token": 0.00001` + - Commit [93037ea](https://github.com/BerriAI/litellm/commit/93037ea) in litellm. + +- 2025-04-22 05:48:00 UTC (Mon Apr 21 22:48:00 2025 -0700) + - Litellm started including reasoning tokens in token count reporting. + - Commit [a7db0df](https://github.com/BerriAI/litellm/commit/a7db0df0434bfbac2b68ebe1c343b77955becb4b) in litellm. + - This fix was released in litellm v1.67.1. + +- 2025-04-28 14:53:20 UTC (Mon Apr 28 07:53:20 2025 -0700) + - Aider upgraded its litellm dependency from v1.65.7 to v1.67.4.post1, which included the reasoning token count fix. + - Commit [9351f37](https://github.com/Aider-AI/aider/commit/9351f37) in aider. + - This dependency change shipped on May 5, 2025 in aider v0.82.3. diff --git a/aider/website/_posts/2025-05-08-qwen3.md b/aider/website/_posts/2025-05-08-qwen3.md new file mode 100644 index 000000000..80b580d1c --- /dev/null +++ b/aider/website/_posts/2025-05-08-qwen3.md @@ -0,0 +1,365 @@ +--- +layout: post +title: Qwen3 benchmark results +excerpt: "Benchmark results for Qwen3 models using the Aider polyglot coding benchmark." +highlight_image: /assets/2025-05-08-qwen3.jpg +date: 2025-05-08 +--- + +# Qwen3 results on the aider polyglot benchmark + +As [previously discussed when Qwen2.5 was released](/2024/11/21/quantization.html), +details matter when working with open source models for AI coding. +Proprietary models are served by their creators or trusted providers with stable inference settings. +Open source models are wonderful because anyone can serve them, +but API providers can use very different inference settings, quantizations, etc. + +Below are collection of aider polyglot benchmark results for the new Qwen3 models. +Results are presented using both "diff" and "whole" +[edit formats](https://aider.chat/docs/more/edit-formats.html), +with various models settings, against various API providers. + +See details on the +[model settings](https://aider.chat/docs/config/adv-model-settings.html#model-settings) +used after the results table. + +{: .note } +This article is being updated as new results become available. +Also, some results were submitted by aider users and have not been verified. + +

Qwen3 results on the aider polyglot benchmark

+ +
+ +
+ + + +
+ +
+ + + + + + + + + + + + + + + {% assign max_cost = 0 %} + {% for row in site.data.qwen3_leaderboard %} + {% if row.total_cost > max_cost %} + {% assign max_cost = row.total_cost %} + {% endif %} + {% endfor %} + {% if max_cost == 0 %}{% assign max_cost = 1 %}{% endif %} + {% assign edit_sorted = site.data.qwen3_leaderboard | sort: 'pass_rate_2' | reverse %} + {% for row in edit_sorted %} {% comment %} Add loop index for unique IDs {% endcomment %} + {% assign row_index = forloop.index0 %} + + + + + + + + + + + + + {% endfor %} + +
+ + ModelPercent correctCostCommandCorrect edit formatEdit Format
+ + + {{ row.model }} +
+ {{ row.pass_rate_2 }}% +
+ {% if row.total_cost > 0 %} +
+ {% endif %} + {% assign rounded_cost = row.total_cost | times: 1.0 | round: 2 %} + {% if row.total_cost == 0 or rounded_cost == 0.00 %}{% else %}${{ rounded_cost }}{% endif %} +
{{ row.command }}{{ row.percent_cases_well_formed }}%{{ row.edit_format }}
+ + + + + + +## No think, via official Alibaba API + +These results were obtained running against `https://dashscope.aliyuncs.com/compatible-mode/v1` +with no thinking. + +```bash +export OPENAI_API_BASE=https://dashscope.aliyuncs.com/compatible-mode/v1 +export OPENAI_API_KEY= +``` + +```yaml +- name: openai/qwen3-235b-a22b + use_temperature: 0.7 + streaming: false + extra_params: + stream: false + max_tokens: 16384 + top_p: 0.8 + top_k: 20 + temperature: 0.7 + enable_thinking: false + extra_body: + enable_thinking: false +``` + +## OpenRouter only TogetherAI, recommended /no_think settings + +These results were obtained with the +[recommended](https://huggingface.co/Qwen/Qwen3-235B-A22B#best-practices) +non-thinking model settings in `.aider.model.settings.yml`: + +```yaml +- name: openrouter/qwen/qwen3-235b-a22b + system_prompt_prefix: "/no_think" + use_temperature: 0.7 + extra_params: + max_tokens: 24000 + top_p: 0.8 + top_k: 20 + min_p: 0.0 + temperature: 0.7 + extra_body: + provider: + order: ["Together"] +``` + +And then running aider: + +```bash +aider --model openrouter/qwen/qwen3-235b-a22b +``` + + +## OpenRouter, all providers, default settings (thinking) + +These results were obtained by simply running aider as shown below, without any model specific settings. +This should have enabled thinking, assuming upstream API providers honor that convention for Qwen3. + +```bash +aider --model openrouter/qwen/qwen3-xxx +``` + +## VLLM, bfloat16, recommended /no_think + +These [benchmarks results were obtained by GitHub user AlongWY](https://github.com/Aider-AI/aider/pull/3908) +with the +[recommended](https://huggingface.co/Qwen/Qwen3-235B-A22B#best-practices) +non-thinking model settings in `.aider.model.settings.yml`: + +```yaml +- name: openai/ + system_prompt_prefix: "/no_think" + use_temperature: 0.7 + extra_params: + max_tokens: 24000 + top_p: 0.8 + top_k: 20 + min_p: 0.0 + temperature: 0.7 +``` + +And then running aider: + +```bash +aider --model openai/ --openai-api-base +``` diff --git a/aider/website/assets/2025-05-08-qwen3.jpg b/aider/website/assets/2025-05-08-qwen3.jpg new file mode 100644 index 000000000..69934518c Binary files /dev/null and b/aider/website/assets/2025-05-08-qwen3.jpg differ diff --git a/aider/website/assets/home.css b/aider/website/assets/home.css index b46efaa23..9d64fd2e1 100644 --- a/aider/website/assets/home.css +++ b/aider/website/assets/home.css @@ -446,7 +446,7 @@ code, pre, .code-block { } .testimonial-text::before { - content: "\201C"; /* Opening fancy quote */ + content: "\201C\00A0"; /* Opening fancy quote */ color: var(--primary); margin-right: 4px; vertical-align: -0.3em; diff --git a/aider/website/assets/sample-analytics.jsonl b/aider/website/assets/sample-analytics.jsonl index 6f29aa337..b4560686c 100644 --- a/aider/website/assets/sample-analytics.jsonl +++ b/aider/website/assets/sample-analytics.jsonl @@ -1,1000 +1,1000 @@ -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577003} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 19980, "completion_tokens": 209, "total_tokens": 20189, "cost": 0.063075, "total_cost": 0.61737}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577011} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577039} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577050} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 20284, "completion_tokens": 562, "total_tokens": 20846, "cost": 0.06928200000000001, "total_cost": 0.686652}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577062} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577094} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 20748, "completion_tokens": 570, "total_tokens": 21318, "cost": 0.070794, "total_cost": 0.7574460000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577107} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577148} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577199} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577199} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 18851, "completion_tokens": 341, "total_tokens": 19192, "cost": 0.061668, "total_cost": 0.8191140000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577212} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577284} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 21544, "completion_tokens": 921, "total_tokens": 22465, "cost": 0.07844699999999999, "total_cost": 0.897561}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577304} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577305} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 23437, "completion_tokens": 960, "total_tokens": 24397, "cost": 0.084711, "total_cost": 0.982272}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577328} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577329} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 25273, "completion_tokens": 627, "total_tokens": 25900, "cost": 0.085224, "total_cost": 1.067496}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577347} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577348} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577354} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577356} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577390} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 13107, "completion_tokens": 553, "total_tokens": 13660, "cost": 0.047616000000000006, "total_cost": 1.115112}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577401} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577417} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577431} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577441} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 13101, "completion_tokens": 825, "total_tokens": 13926, "cost": 0.051678, "total_cost": 1.1667900000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577458} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577481} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 14119, "completion_tokens": 509, "total_tokens": 14628, "cost": 0.049992, "total_cost": 1.2167820000000003}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577492} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577511} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577529} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 14688, "completion_tokens": 513, "total_tokens": 15201, "cost": 0.051759, "total_cost": 1.2685410000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577541} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577541} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 15982, "completion_tokens": 514, "total_tokens": 16496, "cost": 0.055656000000000004, "total_cost": 1.3241970000000003}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577552} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577622} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 16560, "completion_tokens": 1044, "total_tokens": 17604, "cost": 0.06534000000000001, "total_cost": 1.3895370000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577642} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577666} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 17795, "completion_tokens": 382, "total_tokens": 18177, "cost": 0.059115, "total_cost": 1.4486520000000003}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744577676} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578142} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578142} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578145} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578600} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578601} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578601} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578601} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578602} -{"event": "ai-comments execute", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578602} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578602} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 14829, "completion_tokens": 515, "total_tokens": 15344, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578625} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578634} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 15859, "completion_tokens": 252, "total_tokens": 16111, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578640} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578711} -{"event": "ai-comments execute", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578745} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578745} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 31847, "completion_tokens": 913, "total_tokens": 32760, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578766} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578802} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 33028, "completion_tokens": 171, "total_tokens": 33199, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578814} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578882} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 33229, "completion_tokens": 1078, "total_tokens": 34307, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578896} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578896} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 35722, "completion_tokens": 1044, "total_tokens": 36766, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578907} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578914} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 37246, "completion_tokens": 219, "total_tokens": 37465, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578919} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578948} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 37520, "completion_tokens": 523, "total_tokens": 38043, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578959} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578990} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 38220, "completion_tokens": 381, "total_tokens": 38601, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744578997} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579008} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579010} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579011} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579026} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 15395, "completion_tokens": 1022, "total_tokens": 16417, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579035} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579044} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 17097, "completion_tokens": 653, "total_tokens": 17750, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579053} -{"event": "ai-comments execute", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579710} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579710} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 17585, "completion_tokens": 386, "total_tokens": 17971, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579725} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579761} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 18039, "completion_tokens": 873, "total_tokens": 18912, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579781} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579783} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 19435, "completion_tokens": 254, "total_tokens": 19689, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579793} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579798} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 20006, "completion_tokens": 227, "total_tokens": 20233, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744579804} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744586979} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744586995} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744586995} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 11494, "completion_tokens": 1239, "total_tokens": 12733, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587032} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587133} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587134} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587134} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587134} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587151} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587154} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587155} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587155} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587155} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587176} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 13376, "completion_tokens": 902, "total_tokens": 14278, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587186} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587224} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587226} -{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587229} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587253} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 13814, "completion_tokens": 296, "total_tokens": 14110, "cost": 0.045882, "total_cost": 0.045882}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587261} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587278} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587283} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587283} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587305} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587305} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 13075, "completion_tokens": 2645, "total_tokens": 15720, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744587358} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591225} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591226} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591226} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591226} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591241} -{"event": "ai-comments execute", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591241} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591241} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 14867, "completion_tokens": 214, "total_tokens": 15081, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591248} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591285} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 15502, "completion_tokens": 173, "total_tokens": 15675, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591288} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591289} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 16016, "completion_tokens": 49, "total_tokens": 16065, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744591293} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744593859} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744606398} -{"event": "exit", "properties": {"reason": "Listed models"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744606400} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744644920} -{"event": "repo", "properties": {"num_files": 205}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744644926} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744644926} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744644929} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744644932} -{"event": "ai-comments execute", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744644932} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744644932} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 6260, "completion_tokens": 112, "total_tokens": 6372, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744644943} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744644959} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648515} -{"event": "repo", "properties": {"num_files": 205}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648516} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648516} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648516} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648538} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648543} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648544} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 3917, "completion_tokens": 433, "total_tokens": 4350, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648558} -{"event": "command_code", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648573} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648574} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 6666, "completion_tokens": 192, "total_tokens": 6858, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648578} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648601} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648632} -{"event": "repo", "properties": {"num_files": 209}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648632} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648632} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648633} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648645} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 6426, "completion_tokens": 113, "total_tokens": 6539, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648649} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648658} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648729} -{"event": "repo", "properties": {"num_files": 209}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648729} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648729} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648729} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648746} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 6386, "completion_tokens": 150, "total_tokens": 6536, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648754} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648848} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 6704, "completion_tokens": 222, "total_tokens": 6926, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648858} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648889} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 6951, "completion_tokens": 215, "total_tokens": 7166, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648896} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648911} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 7181, "completion_tokens": 181, "total_tokens": 7362, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744648917} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744649052} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 7409, "completion_tokens": 365, "total_tokens": 7774, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744649062} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744649118} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744663883} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744663885} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744663885} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744663885} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664016} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664025} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664027} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664027} -{"event": "cli session", "properties": {"main_model": "gpt-4.1", "weak_model": "gpt-4.1", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664027} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664029} -{"event": "message_send", "properties": {"main_model": "gpt-4.1", "weak_model": "gpt-4.1", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 10637, "completion_tokens": 50, "total_tokens": 10687, "cost": 0.021674, "total_cost": 0.021674}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664034} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664040} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664048} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664051} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664051} -{"event": "cli session", "properties": {"main_model": "gpt-4.1", "weak_model": "gpt-4.1", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664051} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664071} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664182} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664183} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664183} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664183} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664319} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 14361, "completion_tokens": 809, "total_tokens": 15170, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664339} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664340} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 15983, "completion_tokens": 334, "total_tokens": 16317, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664349} -{"event": "command_architect", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664636} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664639} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664643} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664649} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664650} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 12108, "completion_tokens": 649, "total_tokens": 12757, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664664} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664664} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 9878, "completion_tokens": 936, "total_tokens": 10814, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664674} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664709} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664727} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 12196, "completion_tokens": 178, "total_tokens": 12374, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664733} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664733} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 9525, "completion_tokens": 217, "total_tokens": 9742, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664738} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664814} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 12464, "completion_tokens": 452, "total_tokens": 12916, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664831} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664832} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 9839, "completion_tokens": 957, "total_tokens": 10796, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664848} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664885} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664886} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664892} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664918} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 12204, "completion_tokens": 92, "total_tokens": 12296, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664926} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664926} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 9439, "completion_tokens": 114, "total_tokens": 9553, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664932} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664961} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664963} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 12251, "completion_tokens": 305, "total_tokens": 12556, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664980} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664980} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 9674, "completion_tokens": 73, "total_tokens": 9747, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744664984} -{"event": "command_reset", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665447} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665455} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665459} -{"event": "command_tokens", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665471} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665484} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665533} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 24637, "completion_tokens": 2765, "total_tokens": 27402, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665600} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665600} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 24366, "completion_tokens": 121, "total_tokens": 24487, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665607} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665905} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665906} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665906} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665906} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665914} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665949} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665951} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665951} -{"event": "cli session", "properties": {"main_model": "gpt-4.1", "weak_model": "gpt-4.1-mini", "editor_model": "gpt-4.1-mini", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665951} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665952} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665952} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665966} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 16140, "completion_tokens": 311, "total_tokens": 16451, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665977} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665978} -{"event": "command_architect", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665984} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665986} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665987} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 13886, "completion_tokens": 174, "total_tokens": 14060, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665994} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665994} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 11452, "completion_tokens": 290, "total_tokens": 11742, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665999} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744665999} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 12204, "completion_tokens": 317, "total_tokens": 12521, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666007} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666080} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666094} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666096} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666096} -{"event": "cli session", "properties": {"main_model": "gpt-4.1-mini", "weak_model": "gpt-4.1-mini", "editor_model": "gpt-4.1-mini", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666096} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666098} -{"event": "message_send", "properties": {"main_model": "gpt-4.1-mini", "weak_model": "gpt-4.1-mini", "editor_model": "gpt-4.1-mini", "edit_format": "diff", "prompt_tokens": 11733, "completion_tokens": 42, "total_tokens": 11775, "cost": 0.0047604, "total_cost": 0.0047604}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666101} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666102} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666102} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666302} -{"event": "repo", "properties": {"num_files": 590}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666303} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666303} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666303} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666308} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666367} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 27445, "completion_tokens": 2380, "total_tokens": 29825, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666387} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666387} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 23982, "completion_tokens": 2376, "total_tokens": 26358, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666406} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666590} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 30380, "completion_tokens": 987, "total_tokens": 31367, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666601} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666602} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 31879, "completion_tokens": 238, "total_tokens": 32117, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666613} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666619} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 32674, "completion_tokens": 169, "total_tokens": 32843, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666622} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666704} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666704} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 29052, "completion_tokens": 1012, "total_tokens": 30064, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666742} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666873} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666877} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666885} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666893} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666893} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666923} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 14154, "completion_tokens": 137, "total_tokens": 14291, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666930} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666931} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 17505, "completion_tokens": 1217, "total_tokens": 18722, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666932} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 11623, "completion_tokens": 226, "total_tokens": 11849, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666939} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744666971} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667034} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 19170, "completion_tokens": 5717, "total_tokens": 24887, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667035} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667035} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 14509, "completion_tokens": 7991, "total_tokens": 22500, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667108} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667115} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 26817, "completion_tokens": 629, "total_tokens": 27446, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667123} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667145} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667155} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667155} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 14926, "completion_tokens": 1210, "total_tokens": 16136, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667199} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667332} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667350} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667366} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667367} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667408} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 14827, "completion_tokens": 2438, "total_tokens": 17265, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667443} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667449} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 15669, "completion_tokens": 2562, "total_tokens": 18231, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667470} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667479} -{"event": "command_chat-mode", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667492} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667498} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 15842, "completion_tokens": 1819, "total_tokens": 17661, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667522} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667523} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 18852, "completion_tokens": 2212, "total_tokens": 21064, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667547} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667547} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667563} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667564} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667659} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 11633, "completion_tokens": 1878, "total_tokens": 13511, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667686} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667738} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667769} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667769} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 11319, "completion_tokens": 1373, "total_tokens": 12692, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667791} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667864} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667877} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 12727, "completion_tokens": 1245, "total_tokens": 13972, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667888} -{"event": "command_chat-mode", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667907} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667913} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "whole", "prompt_tokens": 13359, "completion_tokens": 1287, "total_tokens": 14646, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667925} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667990} -{"event": "command_architect", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667991} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744667996} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668002} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668016} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 21550, "completion_tokens": 885, "total_tokens": 22435, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668037} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668063} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 28286, "completion_tokens": 231, "total_tokens": 28517, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668076} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668077} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 24153, "completion_tokens": 230, "total_tokens": 24383, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668081} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668082} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 24627, "completion_tokens": 137, "total_tokens": 24764, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668088} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668088} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 25094, "completion_tokens": 201, "total_tokens": 25295, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668096} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668136} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 28588, "completion_tokens": 226, "total_tokens": 28814, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668140} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668140} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 24152, "completion_tokens": 322, "total_tokens": 24474, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668144} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668205} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668206} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668210} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668212} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 10474, "completion_tokens": 570, "total_tokens": 11044, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668262} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668263} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 7990, "completion_tokens": 342, "total_tokens": 8332, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668268} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668312} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668319} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668324} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668337} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668337} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668349} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668349} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668352} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668352} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 10679, "completion_tokens": 744, "total_tokens": 11423, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668379} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668395} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668414} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668414} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 26914, "completion_tokens": 596, "total_tokens": 27510, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668429} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668482} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 28214, "completion_tokens": 358, "total_tokens": 28572, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668500} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668500} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 24042, "completion_tokens": 694, "total_tokens": 24736, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668507} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668515} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 25085, "completion_tokens": 247, "total_tokens": 25332, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668520} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744668953} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669081} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669081} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669081} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669081} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 18624, "completion_tokens": 269, "total_tokens": 18893, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669098} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669098} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669376} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669378} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669378} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669378} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669383} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669387} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669429} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669429} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 14983, "completion_tokens": 1139, "total_tokens": 16122, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669461} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669542} -{"event": "command_architect", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669548} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669580} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 20805, "completion_tokens": 5572, "total_tokens": 26377, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669658} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669688} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 22478, "completion_tokens": 4781, "total_tokens": 27259, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669730} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669757} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 33839, "completion_tokens": 1342, "total_tokens": 35181, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669769} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669771} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 35644, "completion_tokens": 225, "total_tokens": 35869, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669785} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669796} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 36366, "completion_tokens": 207, "total_tokens": 36573, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669801} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669833} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 26513, "completion_tokens": 316, "total_tokens": 26829, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669849} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669849} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 17223, "completion_tokens": 354, "total_tokens": 17577, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669854} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669856} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 18094, "completion_tokens": 198, "total_tokens": 18292, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669866} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669899} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669912} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 31576, "completion_tokens": 304, "total_tokens": 31880, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669919} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669924} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 35831, "completion_tokens": 484, "total_tokens": 36315, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669934} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669934} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 26407, "completion_tokens": 359, "total_tokens": 26766, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669941} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669947} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 27299, "completion_tokens": 199, "total_tokens": 27498, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669951} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669957} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669962} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669972} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669984} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 42680, "completion_tokens": 195, "total_tokens": 42875, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669994} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744669997} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 43433, "completion_tokens": 183, "total_tokens": 43616, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670004} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670005} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 32376, "completion_tokens": 232, "total_tokens": 32608, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670009} -{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670032} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670033} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670040} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670043} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670066} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670066} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 25630, "completion_tokens": 532, "total_tokens": 26162, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670080} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670098} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 25583, "completion_tokens": 1013, "total_tokens": 26596, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670118} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670118} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "editor-diff-fenced", "prompt_tokens": 23880, "completion_tokens": 1831, "total_tokens": 25711, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670134} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670549} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670620} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670620} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670620} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670620} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670622} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670775} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670775} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670775} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670775} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670781} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670783} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670788} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670811} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 23022, "completion_tokens": 473, "total_tokens": 23495, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670820} -{"event": "command_diff", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670830} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670846} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670893} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670893} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670893} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670893} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 20528, "completion_tokens": 181, "total_tokens": 20709, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670917} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744670917} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672097} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672098} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672098} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672098} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672122} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 12357, "completion_tokens": 1870, "total_tokens": 14227, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672157} -{"event": "command_chat-mode", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672179} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672185} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672187} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672187} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672187} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672188} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672198} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672198} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672201} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672201} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672201} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672201} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672205} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 13588, "completion_tokens": 2991, "total_tokens": 16579, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672244} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672297} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672335} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 16693, "completion_tokens": 3439, "total_tokens": 20132, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672378} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672447} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672450} -{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672455} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672457} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672469} -{"event": "command_think-tokens", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672472} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672473} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 13664, "completion_tokens": 6303, "total_tokens": 19967, "cost": 0.13553700000000002, "total_cost": 0.13553700000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672573} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672841} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672885} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672886} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672886} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672886} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672886} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672886} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672886} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672886} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672886} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672886} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672886} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672887} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672887} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672887} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672887} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672887} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672887} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672887} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672887} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672887} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672887} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672888} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672888} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672888} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672888} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672888} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672888} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672888} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672888} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672888} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672888} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672889} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672889} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672889} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672889} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672889} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672889} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672889} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672889} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672889} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672889} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672890} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672890} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672890} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672890} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672890} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672891} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672891} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672891} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672891} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672891} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672891} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672891} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672891} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672891} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672891} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672892} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672892} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672892} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672892} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672892} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672892} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672892} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672892} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672892} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672892} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672893} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672893} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672893} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672893} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672893} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672894} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672894} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672894} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672894} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672894} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672895} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672895} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672895} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672895} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672990} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672992} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672992} -{"event": "exit", "properties": {"reason": "Exit flag set"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672992} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672992} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672993} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672993} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672993} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744672993} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744673037} -{"event": "gui session", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744673038} -{"event": "exit", "properties": {"reason": "GUI session ended"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744673038} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744676838} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744676839} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744676839} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744676839} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744678980} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744690929} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744690930} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744690930} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744690930} -{"event": "command_chat-mode", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744690933} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744690942} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 12971, "completion_tokens": 1172, "total_tokens": 14143, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744690956} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744690987} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744690990} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744690995} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744690996} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744690996} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744690996} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691005} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691014} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691017} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691018} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691018} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691018} -{"event": "command_chat-mode", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691020} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691022} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 12926, "completion_tokens": 969, "total_tokens": 13895, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691035} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691166} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691169} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691170} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691170} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691170} -{"event": "ai-comments file-add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691214} -{"event": "ai-comments execute", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691214} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691214} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 10036, "completion_tokens": 268, "total_tokens": 10304, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691224} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691233} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691233} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691233} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691233} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691235} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691249} -{"event": "command_chat-mode", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691252} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691254} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 12944, "completion_tokens": 814, "total_tokens": 13758, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691264} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691319} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691338} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691339} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691339} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691339} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691375} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691383} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 12971, "completion_tokens": 1071, "total_tokens": 14042, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691391} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691391} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 14633, "completion_tokens": 1110, "total_tokens": 15743, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691402} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691403} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691415} -{"event": "command_architect", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691417} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691419} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 11955, "completion_tokens": 377, "total_tokens": 12332, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691434} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691434} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 9676, "completion_tokens": 952, "total_tokens": 10628, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691443} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744691586} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744693288} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744693292} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744693293} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744693293} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744693293} -{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744693299} -{"event": "command_think-tokens", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744693302} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744693309} -{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.7-sonnet", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 14284, "completion_tokens": 1017, "total_tokens": 15301, "cost": 0.058107000000000006, "total_cost": 0.058107000000000006}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744693330} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744758990} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761408} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761409} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761409} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761409} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761421} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761421} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761421} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761421} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761473} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761474} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761474} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761474} -{"event": "message_send_exception", "properties": {"exception": "cannot access local variable 'os' where it is not associated with a value"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761475} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761475} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761490} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761490} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761490} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761490} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744761500} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744762281} -{"event": "exit", "properties": {"reason": "Listed models"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744762283} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835675} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835676} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835676} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835676} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835677} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835693} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835696} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835696} -{"event": "cli session", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None", "edit_format": "whole"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835696} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835698} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835707} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835738} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835740} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835740} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835740} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835748} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835757} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835759} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835759} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835759} -{"event": "message_send", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None", "edit_format": "whole", "prompt_tokens": 7906, "completion_tokens": 95, "total_tokens": 8001, "cost": 0.08286, "total_cost": 0.08286}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835764} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744835764} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840697} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840697} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840697} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840698} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840708} -{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840722} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840723} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840728} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840735} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840736} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840736} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840736} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840738} -{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840744} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840747} -{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840756} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840758} -{"event": "message_send", "properties": {"main_model": "o4-mini", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 16129, "completion_tokens": 370, "total_tokens": 16499, "cost": 0.019369900000000002, "total_cost": 0.019369900000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840771} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840803} -{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840812} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840815} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840836} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-preview-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff-fenced", "prompt_tokens": 16190, "completion_tokens": 334, "total_tokens": 16524, "cost": 0.0235775, "total_cost": 0.042947400000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840842} -{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840853} -{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744840853} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744843456} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744843458} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744843458} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744843458} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744843488} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 15525, "completion_tokens": 179, "total_tokens": 15704, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744843495} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744843533} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 15869, "completion_tokens": 267, "total_tokens": 16136, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744843540} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744849446} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 16314, "completion_tokens": 428, "total_tokens": 16742, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744849452} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744849486} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852257} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852266} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852268} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852268} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852268} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gpt-4.1-mini", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 2424, "completion_tokens": 97, "total_tokens": 2521, "cost": 0.028120000000000003, "total_cost": 0.028120000000000003}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852271} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852271} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852277} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852278} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852278} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852278} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852321} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852322} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852322} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852324} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852418} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852419} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852419} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852419} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852419} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852419} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852420} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852420} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852420} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852420} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852420} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852420} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852420} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852420} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852420} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852420} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852420} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852420} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852420} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852420} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852420} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852421} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852421} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852421} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852421} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852421} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852421} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852421} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852421} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852421} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852421} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852422} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852422} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852422} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852422} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852422} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852423} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852423} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852423} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852423} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852423} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852423} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852423} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852423} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852423} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852423} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852424} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852424} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852424} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852424} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852424} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852424} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852424} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852424} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852424} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852424} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852425} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852425} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852425} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852425} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852425} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852425} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852425} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852425} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852425} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852425} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852425} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852425} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852425} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852425} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852426} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852426} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852426} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852426} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852426} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852426} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852427} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852427} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852427} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852427} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852513} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852514} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852514} -{"event": "exit", "properties": {"reason": "Exit flag set"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852514} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852514} -{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852514} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852515} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852515} -{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852515} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852551} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852553} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852553} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852553} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852556} -{"event": "gui session", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852556} -{"event": "exit", "properties": {"reason": "GUI session ended"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852556} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852577} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852579} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852579} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852579} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gpt-4.1-mini", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 2371, "completion_tokens": 70, "total_tokens": 2441, "cost": 0.026510000000000002, "total_cost": 0.026510000000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852582} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852582} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852785} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852788} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852788} -{"event": "cli session", "properties": {"main_model": "huggingface/REDACTED", "weak_model": "huggingface/REDACTED", "editor_model": "huggingface/REDACTED", "edit_format": "whole"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852788} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852789} -{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852857} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852879} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852879} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852879} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852880} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852896} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852905} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852987} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852990} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852990} -{"event": "cli session", "properties": {"main_model": "huggingface/REDACTED", "weak_model": "huggingface/REDACTED", "editor_model": "huggingface/REDACTED", "edit_format": "whole"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852990} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744852991} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853024} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853033} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853036} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853036} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853036} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853057} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853059} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853059} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853059} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853069} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853206} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853209} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853209} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853209} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853216} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853270} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853270} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853270} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853270} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 7310, "completion_tokens": 173, "total_tokens": 7483, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853291} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744853291} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744855133} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744855134} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744855134} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744855134} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744855140} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744855150} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 9490, "completion_tokens": 2108, "total_tokens": 11598, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744855168} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744855169} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 12680, "completion_tokens": 2039, "total_tokens": 14719, "cost": 0.0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744855184} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744855185} -{"event": "command_architect", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744855188} -{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744855202} -{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744855204} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744855205} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "architect", "prompt_tokens": 8474, "completion_tokens": 301, "total_tokens": 8775, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744855212} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744855212} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 6080, "completion_tokens": 477, "total_tokens": 6557, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744855217} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744855261} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744916060} -{"event": "model warning", "properties": {"main_model": "gemini/REDACTED", "weak_model": "gemini/REDACTED", "editor_model": "gemini/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744916063} -{"event": "exit", "properties": {"reason": "Keyboard interrupt during model warnings"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744916064} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744916070} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744916073} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744916073} -{"event": "cli session", "properties": {"main_model": "gemini/REDACTED", "weak_model": "gemini/REDACTED", "editor_model": "gemini/REDACTED", "edit_format": "whole"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744916073} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744916074} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744916083} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744916085} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744916085} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744916085} -{"event": "message_send", "properties": {"main_model": "gemini/REDACTED", "weak_model": "gemini/REDACTED", "editor_model": "gemini/REDACTED", "edit_format": "whole", "prompt_tokens": 593, "completion_tokens": 13, "total_tokens": 606, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744916086} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744916086} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744942667} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744942668} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744942668} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744942668} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744942675} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744942678} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744942692} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945174} -{"event": "model warning", "properties": {"main_model": "gemini/REDACTED", "weak_model": "gemini/REDACTED", "editor_model": "gemini/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945175} -{"event": "exit", "properties": {"reason": "Keyboard interrupt during model warnings"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945188} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945258} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945258} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945258} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945258} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945263} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945267} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945274} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 20283, "completion_tokens": 661, "total_tokens": 20944, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945285} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945322} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 21131, "completion_tokens": 177, "total_tokens": 21308, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945329} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945347} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 21364, "completion_tokens": 68, "total_tokens": 21432, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945350} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945722} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945734} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945735} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945735} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744945738} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946266} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946266} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946266} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946266} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946269} -{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946278} -{"event": "command_reasoning-effort", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946283} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946291} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946291} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 14950, "completion_tokens": 889, "total_tokens": 15839, "cost": 0.18506000000000003, "total_cost": 0.18506000000000003}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946304} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946345} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 16775, "completion_tokens": 5498, "total_tokens": 22273, "cost": 0.38767, "total_cost": 0.5727300000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946391} -{"event": "command_read-only", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946424} -{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946440} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946440} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "ask", "prompt_tokens": 17168, "completion_tokens": 1504, "total_tokens": 18672, "cost": 0.23184000000000005, "total_cost": 0.8045700000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946459} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946483} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "diff", "prompt_tokens": 19187, "completion_tokens": 683, "total_tokens": 19870, "cost": 0.21919000000000002, "total_cost": 1.0237600000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946496} -{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946545} -{"event": "command_chat-mode", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946557} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946572} -{"event": "message_send", "properties": {"main_model": "o3", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "whole", "prompt_tokens": 16552, "completion_tokens": 2609, "total_tokens": 19161, "cost": 0.26988, "total_cost": 1.2936400000000003}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946592} -{"event": "command_diff", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946606} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1744946701} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745087266} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745087267} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745087267} -{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745087270} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745113992} -{"event": "repo", "properties": {"num_files": 611}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745113992} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745113992} -{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745113992} -{"event": "command_help", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745113994} -{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745114112} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161720} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161720} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161720} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161720} -{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro-exp-03-25", "weak_model": "gemini/gemini-2.0-flash", "editor_model": "gemini/gemini-2.5-pro-exp-03-25", "edit_format": "udiff", "prompt_tokens": 1149, "completion_tokens": 23, "total_tokens": 1172, "cost": 0, "total_cost": 0.0}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161736} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161736} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161749} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161783} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161785} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161785} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161785} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161788} -{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161799} -{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161817} -{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161817} -{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161817} -{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1745161818} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754596422} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754596423} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754596423} +{"event": "cli session", "properties": {"main_model": "None", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "None", "edit_format": "whole"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754596423} +{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754596535} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754596591} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754596608} +{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754596613} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754596675} +{"event": "message_send", "properties": {"main_model": "None", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "None", "edit_format": "diff", "prompt_tokens": 17302, "completion_tokens": 87, "total_tokens": 17389, "cost": 0.0224975, "total_cost": 0.0224975}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754596723} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754596986} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754596986} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754596986} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754596990} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597081} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597081} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597081} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597084} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597461} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597461} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597461} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597461} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597461} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597461} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597461} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597461} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597461} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597461} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597461} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597462} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597463} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597464} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597464} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597464} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597464} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597464} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597464} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597464} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597464} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597464} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597464} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597464} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597464} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597464} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597464} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597464} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597465} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597465} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597465} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597465} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597465} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597465} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597465} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597465} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597465} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597465} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597465} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597465} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597465} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597465} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597497} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597498} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597498} +{"event": "exit", "properties": {"reason": "Exit flag set"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597498} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597498} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597498} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597498} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597498} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597498} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597511} +{"event": "gui session", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597511} +{"event": "exit", "properties": {"reason": "GUI session ended"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754597511} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600030} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600031} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600032} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600033} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600033} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600033} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600033} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600033} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600033} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600033} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600033} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600033} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600033} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600033} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600033} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600033} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600033} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600033} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600034} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600035} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600035} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600035} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600035} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600068} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600068} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600068} +{"event": "exit", "properties": {"reason": "Exit flag set"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600068} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600068} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600068} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600068} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600068} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600068} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600079} +{"event": "gui session", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600079} +{"event": "exit", "properties": {"reason": "GUI session ended"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754600079} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656324} +{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656335} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656441} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656462} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656463} +{"event": "exit", "properties": {"reason": "Keyboard interrupt during model warnings"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656463} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656473} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656473} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656473} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656473} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656479} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656480} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656480} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656480} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656480} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656487} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656488} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656488} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656488} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656488} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656496} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656496} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656496} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656496} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656498} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656500} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656511} +{"event": "message_send", "properties": {"main_model": "None", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "None", "edit_format": "diff", "prompt_tokens": 33867, "completion_tokens": 1347, "total_tokens": 35214, "cost": 0.055803750000000006, "total_cost": 0.07830125}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656662} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656857} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656858} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656858} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656858} +{"event": "message_send", "properties": {"main_model": "None", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "None", "edit_format": "diff", "prompt_tokens": 9529, "completion_tokens": 78, "total_tokens": 9607, "cost": 0.0005076499999999999, "total_cost": 0.0005076499999999999}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754656878} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754657762} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754657780} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754657790} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754657804} +{"event": "message_send", "properties": {"main_model": "None", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "None", "edit_format": "diff", "prompt_tokens": 34423, "completion_tokens": 318, "total_tokens": 34741, "cost": 0.04620875000000001, "total_cost": 0.12451000000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754657909} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754659127} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754659135} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754659136} +{"event": "command_drop", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754659141} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754659146} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754659355} +{"event": "message_send", "properties": {"main_model": "None", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "None", "edit_format": "diff", "prompt_tokens": 24990, "completion_tokens": 1597, "total_tokens": 26587, "cost": 0.0472075, "total_cost": 0.17171750000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754659469} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754662848} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754662853} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754662891} +{"event": "message_send", "properties": {"main_model": "None", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "None", "edit_format": "ask", "prompt_tokens": 22199, "completion_tokens": 59, "total_tokens": 22258, "cost": 0.028338750000000003, "total_cost": 0.20005625000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754662921} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743653} +{"event": "message_send", "properties": {"main_model": "None", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "None", "edit_format": "ask", "prompt_tokens": 22280, "completion_tokens": 912, "total_tokens": 23192, "cost": 0.03697, "total_cost": 0.23702625000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743709} +{"event": "command_code", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743759} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743759} +{"event": "command_chat-mode", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743826} +{"event": "command_code", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743828} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743828} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743839} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743840} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743840} +{"event": "cli session", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "gpt-5", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743840} +{"event": "exit", "properties": {"reason": "Control-C"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743842} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743882} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743883} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743883} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743891} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743891} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743891} +{"event": "cli session", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "gpt-5", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743892} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743897} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754743914} +{"event": "message_send", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "gpt-5", "edit_format": "diff", "prompt_tokens": 24532, "completion_tokens": 930, "total_tokens": 25462, "cost": 0.039965, "total_cost": 0.039965}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754744011} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754744023} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754744023} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754744056} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754744057} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754744057} +{"event": "cli session", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "gpt-5", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754744057} +{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754744062} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754744091} +{"event": "message_send", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "gpt-5", "edit_format": "diff", "prompt_tokens": 9067, "completion_tokens": 266, "total_tokens": 9333, "cost": 0.01399375, "total_cost": 0.01399375}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754744150} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754748500} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754748501} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754748501} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754748501} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754748502} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753011} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753013} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753013} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753013} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753014} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753045} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753051} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753051} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753051} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753190} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753192} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753192} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753192} +{"event": "message_send", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "gpt-5", "edit_format": "diff", "prompt_tokens": 5598, "completion_tokens": 169, "total_tokens": 5767, "cost": 0.0086875, "total_cost": 0.0086875}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753302} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753302} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753444} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753444} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753444} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753444} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753444} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753444} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753444} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753444} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753444} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753444} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753444} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753445} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753446} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753447} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753447} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753447} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753447} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753447} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753447} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753447} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753447} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753447} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753447} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753447} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753447} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753447} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753447} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753447} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753448} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753448} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753448} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753448} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753448} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753448} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753448} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753448} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753448} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753448} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753448} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753448} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753448} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753448} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753485} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753486} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753486} +{"event": "exit", "properties": {"reason": "Exit flag set"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753486} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753486} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753486} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753486} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753486} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753486} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753584} +{"event": "gui session", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753584} +{"event": "exit", "properties": {"reason": "GUI session ended"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753584} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753822} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753822} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753822} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753822} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753822} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753822} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753823} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753824} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753824} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753824} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753824} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753824} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753824} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753824} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753824} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753824} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753824} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753824} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753824} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753824} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753824} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753824} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753825} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753826} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753874} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753875} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753875} +{"event": "exit", "properties": {"reason": "Exit flag set"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753875} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753875} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753875} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753875} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753875} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753875} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753991} +{"event": "gui session", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753991} +{"event": "exit", "properties": {"reason": "GUI session ended"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754753991} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754234} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754234} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754234} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754234} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754234} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754234} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754235} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754236} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754236} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754236} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754236} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754236} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754236} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754236} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754236} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754236} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754236} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754236} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754236} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754236} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754236} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754236} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754236} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754237} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754754238} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754755056} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754755056} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754755056} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "gemini/gemini-2.5-pro", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754755056} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754755058} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761389} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761389} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761389} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761389} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-flash-lite-preview-06-17", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "gemini/gemini-2.5-flash-lite-preview-06-17", "edit_format": "diff-fenced", "prompt_tokens": 11364, "completion_tokens": 7, "total_tokens": 11371, "cost": 0.00011644, "total_cost": 0.00011644}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761392} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761392} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761396} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761397} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761397} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761397} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-flash-lite", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "gemini/gemini-2.5-flash-lite", "edit_format": "whole", "prompt_tokens": 7744, "completion_tokens": 10, "total_tokens": 7754, "cost": 0.0007784, "total_cost": 0.0007784}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761399} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761399} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761448} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761448} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761448} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-flash-lite", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "gemini/gemini-2.5-flash-lite", "edit_format": "whole"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761449} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761451} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-flash-lite", "weak_model": "gemini/gemini-2.5-flash", "editor_model": "gemini/gemini-2.5-flash-lite", "edit_format": "whole", "prompt_tokens": 7706, "completion_tokens": 10, "total_tokens": 7716, "cost": 0.0007746, "total_cost": 0.0007746}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761452} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761453} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761465} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761465} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761465} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754761467} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754930718} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754930719} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754930719} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754930720} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933180} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933180} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933180} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-2.5-pro", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933180} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933182} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933186} +{"event": "repo", "properties": {"num_files": 630}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933186} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933186} +{"event": "cli session", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933186} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933194} +{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933195} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933238} +{"event": "message_send", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "ask", "prompt_tokens": 9039, "completion_tokens": 480, "total_tokens": 9519, "cost": 0.016098750000000002, "total_cost": 0.016098750000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933277} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933429} +{"event": "message_send", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "ask", "prompt_tokens": 10555, "completion_tokens": 614, "total_tokens": 11169, "cost": 0.01933375, "total_cost": 0.035432500000000006}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933466} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933484} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933511} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933518} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933520} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933531} +{"event": "message_send", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "ask", "prompt_tokens": 11213, "completion_tokens": 402, "total_tokens": 11615, "cost": 0.01803625, "total_cost": 0.05346875000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754933553} +{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754934338} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754934346} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "ask", "prompt_tokens": 10367, "completion_tokens": 152, "total_tokens": 10519, "cost": 0.014478750000000002, "total_cost": 0.06794750000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754934374} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754935784} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "ask", "prompt_tokens": 14048, "completion_tokens": 99, "total_tokens": 14147, "cost": 0.018550000000000004, "total_cost": 0.0864975}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754935804} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754935822} +{"event": "command_paste", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754935845} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754935845} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "ask", "prompt_tokens": 14345, "completion_tokens": 191, "total_tokens": 14536, "cost": 0.019841250000000005, "total_cost": 0.10633875000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754935865} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754935868} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "ask", "prompt_tokens": 16341, "completion_tokens": 329, "total_tokens": 16670, "cost": 0.02371625, "total_cost": 0.130055}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754935893} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754935909} +{"event": "command_edit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754935947} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754935985} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "ask", "prompt_tokens": 13105, "completion_tokens": 305, "total_tokens": 13410, "cost": 0.01943125, "total_cost": 0.14948625000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754936015} +{"event": "command_code", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754936019} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754936019} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "diff-fenced", "prompt_tokens": 15838, "completion_tokens": 219, "total_tokens": 16057, "cost": 0.021987500000000004, "total_cost": 0.17147375}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754936041} +{"event": "command_paste", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754938389} +{"event": "command_paste", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754938401} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754938425} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "ask", "prompt_tokens": 15599, "completion_tokens": 419, "total_tokens": 16018, "cost": 0.02368875, "total_cost": 0.19516250000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754938476} +{"event": "command_code", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754938512} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754938512} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "diff-fenced", "prompt_tokens": 16555, "completion_tokens": 442, "total_tokens": 16997, "cost": 0.02511375, "total_cost": 0.22027625}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754938570} +{"event": "command_paste", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754938670} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754938672} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "ask", "prompt_tokens": 15547, "completion_tokens": 236, "total_tokens": 15783, "cost": 0.021793750000000004, "total_cost": 0.24207}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754938709} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754938928} +{"event": "command_model", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754938931} +{"event": "command_reasoning-effort", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754938934} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754938947} +{"event": "message_send", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "ask", "prompt_tokens": 13076, "completion_tokens": 242, "total_tokens": 13318, "cost": 0.018765000000000004, "total_cost": 0.26083500000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754938998} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754939180} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754939197} +{"event": "message_send", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "ask", "prompt_tokens": 13093, "completion_tokens": 370, "total_tokens": 13463, "cost": 0.02006625, "total_cost": 0.28090125000000005}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754939266} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754939471} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754939472} +{"event": "message_send", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "ask", "prompt_tokens": 13026, "completion_tokens": 346, "total_tokens": 13372, "cost": 0.019742500000000003, "total_cost": 0.30064375000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754939515} +{"event": "command_code", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754939561} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754939561} +{"event": "message_send", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "diff", "prompt_tokens": 15724, "completion_tokens": 557, "total_tokens": 16281, "cost": 0.025225000000000004, "total_cost": 0.32586875000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754939680} +{"event": "command_paste", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754939951} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754939953} +{"event": "message_send", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "ask", "prompt_tokens": 14953, "completion_tokens": 386, "total_tokens": 15339, "cost": 0.022551250000000002, "total_cost": 0.34842000000000006}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754940056} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754940444} +{"event": "message_send", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "ask", "prompt_tokens": 15349, "completion_tokens": 275, "total_tokens": 15624, "cost": 0.02193625, "total_cost": 0.37035625000000005}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754940489} +{"event": "command_code", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754940788} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754940788} +{"event": "message_send", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "diff", "prompt_tokens": 17199, "completion_tokens": 302, "total_tokens": 17501, "cost": 0.02451875, "total_cost": 0.39487500000000003}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754940881} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754941211} +{"event": "message_send", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "ask", "prompt_tokens": 15569, "completion_tokens": 208, "total_tokens": 15777, "cost": 0.021541250000000005, "total_cost": 0.41641625000000004}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754941379} +{"event": "command_code", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754942025} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754942025} +{"event": "message_send", "properties": {"main_model": "gpt-5", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-5", "edit_format": "diff", "prompt_tokens": 17425, "completion_tokens": 107, "total_tokens": 17532, "cost": 0.022851250000000004, "total_cost": 0.43926750000000003}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754942076} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1754944311} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755004879} +{"event": "repo", "properties": {"num_files": 631}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755004880} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755004880} +{"event": "cli session", "properties": {"main_model": "o3-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-4.1", "edit_format": "diff"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755004880} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755004902} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755004902} +{"event": "message_send", "properties": {"main_model": "o3-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-4.1", "edit_format": "ask", "prompt_tokens": 7420, "completion_tokens": 616, "total_tokens": 8036, "cost": 0.19768000000000002, "total_cost": 0.19768000000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755004942} +{"event": "command_code", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755004948} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755004948} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755004961} +{"event": "command_paste", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755004990} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755005009} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755005009} +{"event": "message_send", "properties": {"main_model": "o3-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-4.1", "edit_format": "ask", "prompt_tokens": 7438, "completion_tokens": 1987, "total_tokens": 9425, "cost": 0.30772, "total_cost": 0.5054000000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755005114} +{"event": "command_code", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755005139} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755005139} +{"event": "message_send", "properties": {"main_model": "o3-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-4.1", "edit_format": "diff", "prompt_tokens": 9835, "completion_tokens": 807, "total_tokens": 10642, "cost": 0.26126000000000005, "total_cost": 0.7666600000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755005204} +{"event": "command_undo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755005241} +{"event": "command_clear", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755005605} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755005607} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755005622} +{"event": "message_send", "properties": {"main_model": "o3-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gpt-4.1", "edit_format": "ask", "prompt_tokens": 7375, "completion_tokens": 1142, "total_tokens": 8517, "cost": 0.23886000000000002, "total_cost": 1.0055200000000002}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755005682} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755005775} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755005802} +{"event": "repo", "properties": {"num_files": 631}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755005802} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755005802} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755005803} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755048059} +{"event": "repo", "properties": {"num_files": 631}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755048059} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755048059} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-2.5-pro", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755048059} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755048062} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755048090} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-2.5-pro", "edit_format": "diff-fenced", "prompt_tokens": 25454, "completion_tokens": 3540, "total_tokens": 28994, "cost": 0.06721750000000001, "total_cost": 0.06721750000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755048217} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755097040} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099878} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099878} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099878} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099878} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099878} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099878} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099878} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099878} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099878} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099878} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099878} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099878} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099878} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099878} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099878} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099878} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099879} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099879} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099879} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099879} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099879} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099879} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099879} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099879} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099879} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099879} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099879} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099879} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099879} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099879} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099879} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099880} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099881} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099882} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099882} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099882} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099882} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099882} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099882} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099882} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099882} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099882} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099914} +{"event": "repo", "properties": {"num_files": 631}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099914} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099914} +{"event": "exit", "properties": {"reason": "Exit flag set"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099914} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099914} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099914} +{"event": "repo", "properties": {"num_files": 631}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099914} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099914} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099914} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099935} +{"event": "gui session", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099935} +{"event": "exit", "properties": {"reason": "GUI session ended"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755099935} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755100327} +{"event": "repo", "properties": {"num_files": 631}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755100327} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755100327} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-2.5-pro", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755100327} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755100329} +{"event": "command_paste", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755100352} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755100352} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-2.5-pro", "edit_format": "ask", "prompt_tokens": 10006, "completion_tokens": 81, "total_tokens": 10087, "cost": 0.013317500000000001, "total_cost": 0.013317500000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755100406} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755100791} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-2.5-pro", "edit_format": "ask", "prompt_tokens": 10829, "completion_tokens": 591, "total_tokens": 11420, "cost": 0.01944625, "total_cost": 0.03276375}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755100863} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755102232} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-2.5-pro", "edit_format": "ask", "prompt_tokens": 11436, "completion_tokens": 162, "total_tokens": 11598, "cost": 0.015915000000000002, "total_cost": 0.04867875000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755102250} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755102403} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-2.5-pro", "edit_format": "ask", "prompt_tokens": 11631, "completion_tokens": 72, "total_tokens": 11703, "cost": 0.015258750000000001, "total_cost": 0.06393750000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755102419} +{"event": "command_code", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755105446} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755105446} +{"event": "command_code", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755105454} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755105454} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-2.5-pro", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-2.5-pro", "edit_format": "diff-fenced", "prompt_tokens": 14046, "completion_tokens": 62, "total_tokens": 14108, "cost": 0.0181775, "total_cost": 0.08211500000000001}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755105459} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755106216} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755106216} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755106216} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755106216} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1755106216} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1759166990} +{"event": "repo", "properties": {"num_files": 633}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1759166990} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1759166990} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1759166999} +{"event": "repo", "properties": {"num_files": 633}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1759167000} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1759167000} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1759167001} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666075} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666076} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666077} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666078} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666079} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666079} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666079} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666079} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666079} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666079} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666079} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666079} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666079} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666079} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666079} +{"event": "no-repo", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666079} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666079} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666079} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666108} +{"event": "repo", "properties": {"num_files": 635}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666109} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666109} +{"event": "exit", "properties": {"reason": "Exit flag set"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666109} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666109} +{"event": "model warning", "properties": {"main_model": "None", "weak_model": "None", "editor_model": "None"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666109} +{"event": "repo", "properties": {"num_files": 635}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666109} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666109} +{"event": "exit", "properties": {"reason": "Unknown edit format"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666109} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666132} +{"event": "gui session", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666132} +{"event": "exit", "properties": {"reason": "GUI session ended"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763666132} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763766579} +{"event": "repo", "properties": {"num_files": 635}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763766579} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763766579} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-3-pro-preview", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-3-pro-preview", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763766579} +{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763766585} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763766594} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763766596} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763766598} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763766615} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-3-pro-preview", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-3-pro-preview", "edit_format": "ask", "prompt_tokens": 25709, "completion_tokens": 321, "total_tokens": 26030, "cost": 0.05527, "total_cost": 0.05527}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763766666} +{"event": "command_reasoning-effort", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763767274} +{"event": "command_run", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763767286} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763767289} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-3-pro-preview", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-3-pro-preview", "edit_format": "ask", "prompt_tokens": 26356, "completion_tokens": 275, "total_tokens": 26631, "cost": 0.05601199999999999, "total_cost": 0.11128199999999999}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763767312} +{"event": "command_code", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763767322} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763767322} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-3-pro-preview", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-3-pro-preview", "edit_format": "diff-fenced", "prompt_tokens": 28932, "completion_tokens": 258, "total_tokens": 29190, "cost": 0.06096, "total_cost": 0.172242}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1763767333} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1764387139} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1764387146} +{"event": "repo", "properties": {"num_files": 635}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1764387147} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1764387147} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1764387147} +{"event": "exit", "properties": {"reason": "Completed --message"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1764387186} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1764800794} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082484} +{"event": "model warning", "properties": {"main_model": "gemini/REDACTED", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/REDACTED"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082486} +{"event": "repo", "properties": {"num_files": 635}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082488} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082488} +{"event": "cli session", "properties": {"main_model": "gemini/REDACTED", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/REDACTED", "edit_format": "whole"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082488} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082490} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082500} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082505} +{"event": "repo", "properties": {"num_files": 635}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082505} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082505} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-3-flash-preview", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-3-flash-preview", "edit_format": "whole"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082505} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082508} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-3-flash-preview", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-3-flash-preview", "edit_format": "whole", "prompt_tokens": 9566, "completion_tokens": 44, "total_tokens": 9610, "cost": 0.004915, "total_cost": 0.004915}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082511} +{"event": "command_chat-mode", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082533} +{"event": "command_chat-mode", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082537} +{"event": "command_add", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082545} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082563} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-3-flash-preview", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-3-flash-preview", "edit_format": "diff-fenced", "prompt_tokens": 28242, "completion_tokens": 276, "total_tokens": 28518, "cost": 0.014949, "total_cost": 0.019864}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082572} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082585} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082588} +{"event": "repo", "properties": {"num_files": 635}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082589} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082589} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-3-flash-preview", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-3-flash-preview", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082589} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082592} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-3-flash-preview", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-3-flash-preview", "edit_format": "diff-fenced", "prompt_tokens": 11441, "completion_tokens": 36, "total_tokens": 11477, "cost": 0.0058284999999999995, "total_cost": 0.0058284999999999995}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082601} +{"event": "command_exit", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082604} +{"event": "exit", "properties": {"reason": "/exit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082604} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082784} +{"event": "repo", "properties": {"num_files": 635}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082784} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082784} +{"event": "cli session", "properties": {"main_model": "gemini/gemini-3-flash-preview", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-3-flash-preview", "edit_format": "diff-fenced"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082784} +{"event": "command_ask", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082798} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082805} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-3-flash-preview", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-3-flash-preview", "edit_format": "ask", "prompt_tokens": 33123, "completion_tokens": 119, "total_tokens": 33242, "cost": 0.0169185, "total_cost": 0.0169185}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082812} +{"event": "command_code", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082826} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082826} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-3-flash-preview", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-3-flash-preview", "edit_format": "diff-fenced", "prompt_tokens": 35613, "completion_tokens": 86, "total_tokens": 35699, "cost": 0.0180645, "total_cost": 0.034983}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082831} +{"event": "command_code", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082856} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082858} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-3-flash-preview", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-3-flash-preview", "edit_format": "diff-fenced", "prompt_tokens": 34442, "completion_tokens": 115, "total_tokens": 34557, "cost": 0.017566000000000002, "total_cost": 0.052549}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082870} +{"event": "message_send_starting", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082885} +{"event": "message_send", "properties": {"main_model": "gemini/gemini-3-flash-preview", "weak_model": "gemini/gemini-2.5-flash-lite", "editor_model": "gemini/gemini-3-flash-preview", "edit_format": "diff-fenced", "prompt_tokens": 34631, "completion_tokens": 102, "total_tokens": 34733, "cost": 0.0176215, "total_cost": 0.0701705}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082891} +{"event": "exit", "properties": {"reason": "Completed main CLI coder.run"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082968} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082994} +{"event": "repo", "properties": {"num_files": 635}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082995} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082995} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766082995} +{"event": "launched", "properties": {}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766083018} +{"event": "repo", "properties": {"num_files": 635}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766083019} +{"event": "auto_commits", "properties": {"enabled": true}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766083019} +{"event": "exit", "properties": {"reason": "Completed lint/test/commit"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1766083022} diff --git a/aider/website/assets/sample.aider.conf.yml b/aider/website/assets/sample.aider.conf.yml index f5f902c9a..f79b13dfb 100644 --- a/aider/website/assets/sample.aider.conf.yml +++ b/aider/website/assets/sample.aider.conf.yml @@ -4,7 +4,7 @@ # Place in your home dir, or at the root of your git repo. ########################################################## -# Note: You can only put OpenAI and Anthropic API keys in the yaml +# Note: You can only put OpenAI and Anthropic API keys in the YAML # config file. Keys for all APIs can be stored in a .env file # https://aider.chat/docs/config/dotenv.html @@ -83,7 +83,7 @@ ## Set the reasoning_effort API parameter (default: not set) #reasoning-effort: xxx -## Set the thinking token budget for models that support it (default: not set) +## Set the thinking token budget for models that support it. Use 0 to disable. (default: not set) #thinking-tokens: xxx ## Verify the SSL cert when connecting to models (default: True) @@ -212,6 +212,9 @@ ## Enable/disable adding .aider* to .gitignore (default: True) #gitignore: true +## Enable/disable the addition of files listed in .gitignore to Aider's editing scope. +#add-gitignore-files: false + ## Specify the aider ignore file (default: .aiderignore in git root) #aiderignore: .aiderignore @@ -224,11 +227,11 @@ ## Enable/disable commits when repo is found dirty (default: True) #dirty-commits: true -## Attribute aider code changes in the git author name (default: True) -#attribute-author: true +## Attribute aider code changes in the git author name (default: True). If explicitly set to True, overrides --attribute-co-authored-by precedence. +#attribute-author: xxx -## Attribute aider commits in the git committer name (default: True) -#attribute-committer: true +## Attribute aider commits in the git committer name (default: True). If explicitly set to True, overrides --attribute-co-authored-by precedence for aider edits. +#attribute-committer: xxx ## Prefix commit messages with 'aider: ' if aider authored the changes (default: False) #attribute-commit-message-author: false @@ -236,6 +239,9 @@ ## Prefix all commit messages with 'aider: ' (default: False) #attribute-commit-message-committer: false +## Attribute aider edits using the Co-authored-by trailer in the commit message (default: True). If True, this takes precedence over default --attribute-author and --attribute-committer behavior unless they are explicitly set to True. +#attribute-co-authored-by: true + ## Enable/disable git pre-commit hooks with --no-verify (default: False) #git-commit-verify: false @@ -292,6 +298,12 @@ ## Permanently disable analytics #analytics-disable: false +## Send analytics to custom PostHog instance +#analytics-posthog-host: xxx + +## Send analytics to custom PostHog project +#analytics-posthog-project-api-key: xxx + ############ # Upgrading: @@ -358,6 +370,9 @@ ################# # Other settings: +## Never prompt for or attempt to install Playwright for web scraping (default: False). +#disable-playwright: false + ## specify a file to edit (can be used multiple times) #file: xxx ## Specify multiple values like this: @@ -380,6 +395,9 @@ ## Specify the language to use in the chat (default: None, uses system settings) #chat-language: xxx +## Specify the language to use in the commit message (default: None, user language) +#commit-language: xxx + ## Always say yes to every confirmation #yes-always: false @@ -422,6 +440,9 @@ ## Specify which editor to use for the /editor command #editor: xxx +## Print shell completion script for the specified SHELL and exit. Supported shells: bash, tcsh, zsh. Example: aider --shell-completions bash +#shell-completions: xxx + ############################ # Deprecated model settings: diff --git a/aider/website/assets/sample.env b/aider/website/assets/sample.env index 439e637de..29ab1a386 100644 --- a/aider/website/assets/sample.env +++ b/aider/website/assets/sample.env @@ -72,7 +72,7 @@ ## Set the reasoning_effort API parameter (default: not set) #AIDER_REASONING_EFFORT= -## Set the thinking token budget for models that support it (default: not set) +## Set the thinking token budget for models that support it. Use 0 to disable. (default: not set) #AIDER_THINKING_TOKENS= ## Verify the SSL cert when connecting to models (default: True) @@ -201,6 +201,9 @@ ## Enable/disable adding .aider* to .gitignore (default: True) #AIDER_GITIGNORE=true +## Enable/disable the addition of files listed in .gitignore to Aider's editing scope. +#AIDER_ADD_GITIGNORE_FILES=false + ## Specify the aider ignore file (default: .aiderignore in git root) #AIDER_AIDERIGNORE=.aiderignore @@ -213,11 +216,11 @@ ## Enable/disable commits when repo is found dirty (default: True) #AIDER_DIRTY_COMMITS=true -## Attribute aider code changes in the git author name (default: True) -#AIDER_ATTRIBUTE_AUTHOR=true +## Attribute aider code changes in the git author name (default: True). If explicitly set to True, overrides --attribute-co-authored-by precedence. +#AIDER_ATTRIBUTE_AUTHOR= -## Attribute aider commits in the git committer name (default: True) -#AIDER_ATTRIBUTE_COMMITTER=true +## Attribute aider commits in the git committer name (default: True). If explicitly set to True, overrides --attribute-co-authored-by precedence for aider edits. +#AIDER_ATTRIBUTE_COMMITTER= ## Prefix commit messages with 'aider: ' if aider authored the changes (default: False) #AIDER_ATTRIBUTE_COMMIT_MESSAGE_AUTHOR=false @@ -225,6 +228,9 @@ ## Prefix all commit messages with 'aider: ' (default: False) #AIDER_ATTRIBUTE_COMMIT_MESSAGE_COMMITTER=false +## Attribute aider edits using the Co-authored-by trailer in the commit message (default: True). If True, this takes precedence over default --attribute-author and --attribute-committer behavior unless they are explicitly set to True. +#AIDER_ATTRIBUTE_CO_AUTHORED_BY=true + ## Enable/disable git pre-commit hooks with --no-verify (default: False) #AIDER_GIT_COMMIT_VERIFY=false @@ -276,6 +282,12 @@ ## Permanently disable analytics #AIDER_ANALYTICS_DISABLE=false +## Send analytics to custom PostHog instance +#AIDER_ANALYTICS_POSTHOG_HOST= + +## Send analytics to custom PostHog project +#AIDER_ANALYTICS_POSTHOG_PROJECT_API_KEY= + ############ # Upgrading: @@ -339,6 +351,9 @@ ################# # Other settings: +## Never prompt for or attempt to install Playwright for web scraping (default: False). +#AIDER_DISABLE_PLAYWRIGHT=false + ## specify a file to edit (can be used multiple times) #AIDER_FILE= @@ -351,6 +366,9 @@ ## Specify the language to use in the chat (default: None, uses system settings) #AIDER_CHAT_LANGUAGE= +## Specify the language to use in the commit message (default: None, user language) +#AIDER_COMMIT_LANGUAGE= + ## Always say yes to every confirmation #AIDER_YES_ALWAYS= @@ -390,6 +408,9 @@ ## Specify which editor to use for the /editor command #AIDER_EDITOR= +## Print shell completion script for the specified SHELL and exit. Supported shells: bash, tcsh, zsh. Example: aider --shell-completions bash +#AIDER_SHELL_COMPLETIONS= + ############################ # Deprecated model settings: diff --git a/aider/website/docs/config/adv-model-settings.md b/aider/website/docs/config/adv-model-settings.md index ded10691a..f2fec67be 100644 --- a/aider/website/docs/config/adv-model-settings.md +++ b/aider/website/docs/config/adv-model-settings.md @@ -81,7 +81,7 @@ You can override or add settings for any model by creating a `.aider.model.setti If the files above exist, they will be loaded in that order. Files loaded last will take priority. -The yaml file should be a list of dictionary objects for each model. +The YAML file should be a list of dictionary objects for each model. ### Passing extra params to litellm.completion @@ -117,40 +117,6 @@ For example: These settings will be merged with any model-specific settings, with the `aider/extra_params` settings taking precedence for any direct conflicts. -### Controlling o1 reasoning effort - -You need this chunk of yaml: - -``` - extra_params: - extra_body: - reasoning_effort: high -``` - -This is a full entry for o1 with that setting, obtained by finding the default -entry in the list below and adding the above `extra_params` entry: - -``` -- name: o1 - edit_format: diff - weak_model_name: gpt-4o-mini - use_repo_map: true - send_undo_reply: false - lazy: false - reminder: user - examples_as_sys_msg: false - cache_control: false - caches_by_default: false - use_system_prompt: true - use_temperature: false - streaming: false - editor_model_name: gpt-4o - editor_edit_format: editor-diff - extra_params: - extra_body: - reasoning_effort: high -``` - ### Default model settings Below are all the pre-configured model settings to give a sense for the settings which are supported. @@ -192,6 +158,34 @@ cog.out("```\n") system_prompt_prefix: null accepts_settings: null +- name: anthropic.claude-opus-4-20250514-v1:0 + edit_format: diff + weak_model_name: anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 32000 + cache_control: true + editor_model_name: anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + +- name: anthropic.claude-sonnet-4-20250514-v1:0 + edit_format: diff + weak_model_name: anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + - name: anthropic/claude-3-5-haiku-20241022 edit_format: diff weak_model_name: anthropic/claude-3-5-haiku-20241022 @@ -280,6 +274,34 @@ cog.out("```\n") anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25 cache_control: true +- name: anthropic/claude-opus-4-20250514 + edit_format: diff + weak_model_name: anthropic/claude-3-5-haiku-20241022 + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 32000 + cache_control: true + editor_model_name: anthropic/claude-sonnet-4-20250514 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + +- name: anthropic/claude-sonnet-4-20250514 + edit_format: diff + weak_model_name: anthropic/claude-3-5-haiku-20241022 + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: anthropic/claude-sonnet-4-20250514 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + - name: azure/gpt-4.1 edit_format: diff weak_model_name: azure/gpt-4.1-mini @@ -292,6 +314,139 @@ cog.out("```\n") use_repo_map: true reminder: sys +- name: azure/gpt-5 + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: azure/gpt-5-2025-08-07 + edit_format: diff + weak_model_name: azure/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: azure/gpt-5-chat + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: azure/gpt-5-chat-latest + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: azure/gpt-5-mini + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: azure/gpt-5-mini-2025-08-07 + edit_format: diff + weak_model_name: azure/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: azure/gpt-5-nano + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: azure/gpt-5-nano-2025-08-07 + edit_format: diff + weak_model_name: azure/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: azure/gpt-5-pro + edit_format: diff + weak_model_name: azure/gpt-5-mini + use_repo_map: true + examples_as_sys_msg: true + use_temperature: false + streaming: false + editor_model_name: azure/gpt-5 + editor_edit_format: editor-diff + system_prompt_prefix: 'Formatting re-enabled. ' + accepts_settings: + - reasoning_effort + +- name: azure/gpt-5.1 + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: azure/gpt-5.1-2025-11-13 + edit_format: diff + weak_model_name: azure/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: azure/gpt-5.1-chat + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: azure/gpt-5.1-chat-latest + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: azure/gpt-5.2 + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: azure/gpt-5.2-2025-12-11 + edit_format: diff + weak_model_name: azure/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: azure/gpt-5.2-chat-latest + edit_format: diff + weak_model_name: azure/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + - name: azure/o1 edit_format: diff weak_model_name: azure/gpt-4o-mini @@ -343,6 +498,18 @@ cog.out("```\n") accepts_settings: - reasoning_effort +- name: azure/o3-pro + edit_format: diff + weak_model_name: azure/gpt-4.1-mini + use_repo_map: true + examples_as_sys_msg: true + streaming: false + editor_model_name: azure/gpt-4.1 + editor_edit_format: editor-diff + system_prompt_prefix: 'Formatting re-enabled. ' + accepts_settings: + - reasoning_effort + - name: azure/o4-mini edit_format: diff weak_model_name: azure/gpt-4.1-mini @@ -441,6 +608,34 @@ cog.out("```\n") accepts_settings: - thinking_tokens +- name: bedrock/anthropic.claude-sonnet-4-20250514-v1:0 + edit_format: diff + weak_model_name: bedrock/anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: bedrock/anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + +- name: bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0 + edit_format: diff + weak_model_name: bedrock/anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: bedrock/global.anthropic.claude-sonnet-4-5-20250929-v1:0 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + - name: bedrock/us.anthropic.claude-3-7-sonnet-20250219-v1:0 edit_format: diff weak_model_name: bedrock/us.anthropic.claude-3-5-haiku-20241022-v1:0 @@ -457,6 +652,20 @@ cog.out("```\n") accepts_settings: - thinking_tokens +- name: bedrock/us.anthropic.claude-sonnet-4-20250514-v1:0 + edit_format: diff + weak_model_name: bedrock/us.anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: bedrock/us.anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + - name: bedrock_converse/anthropic.claude-3-7-sonnet-20250219-v1:0 edit_format: diff weak_model_name: bedrock_converse/anthropic.claude-3-5-haiku-20241022-v1:0 @@ -473,6 +682,62 @@ cog.out("```\n") accepts_settings: - thinking_tokens +- name: bedrock_converse/anthropic.claude-opus-4-20250514-v1:0 + edit_format: diff + weak_model_name: bedrock_converse/anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 32000 + cache_control: true + editor_model_name: bedrock_converse/anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + +- name: bedrock_converse/anthropic.claude-sonnet-4-20250514-v1:0 + edit_format: diff + weak_model_name: bedrock_converse/anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: bedrock_converse/anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + +- name: bedrock_converse/eu.anthropic.claude-opus-4-20250514-v1:0 + edit_format: diff + weak_model_name: bedrock_converse/eu.anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 32000 + cache_control: true + editor_model_name: bedrock_converse/eu.anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + +- name: bedrock_converse/eu.anthropic.claude-sonnet-4-20250514-v1:0 + edit_format: diff + weak_model_name: bedrock_converse/eu.anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: bedrock_converse/eu.anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + - name: bedrock_converse/us.anthropic.claude-3-7-sonnet-20250219-v1:0 edit_format: diff weak_model_name: bedrock_converse/us.anthropic.claude-3-5-haiku-20241022-v1:0 @@ -489,6 +754,34 @@ cog.out("```\n") accepts_settings: - thinking_tokens +- name: bedrock_converse/us.anthropic.claude-opus-4-20250514-v1:0 + edit_format: diff + weak_model_name: bedrock_converse/us.anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 32000 + cache_control: true + editor_model_name: bedrock_converse/us.anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + +- name: bedrock_converse/us.anthropic.claude-sonnet-4-20250514-v1:0 + edit_format: diff + weak_model_name: bedrock_converse/us.anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: bedrock_converse/us.anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + - name: claude-3-5-haiku-20241022 edit_format: diff weak_model_name: claude-3-5-haiku-20241022 @@ -572,6 +865,34 @@ cog.out("```\n") - name: claude-3-sonnet-20240229 weak_model_name: claude-3-5-haiku-20241022 +- name: claude-opus-4-20250514 + edit_format: diff + weak_model_name: claude-3-5-haiku-20241022 + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 32000 + cache_control: true + editor_model_name: claude-sonnet-4-20250514 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + +- name: claude-sonnet-4-20250514 + edit_format: diff + weak_model_name: claude-3-5-haiku-20241022 + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: claude-sonnet-4-20250514 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + - name: cohere_chat/command-a-03-2025 examples_as_sys_msg: true @@ -628,12 +949,40 @@ cog.out("```\n") use_repo_map: true examples_as_sys_msg: true extra_params: - max_tokens: 8192 + max_tokens: 64000 caches_by_default: true use_temperature: false editor_model_name: deepseek/deepseek-chat editor_edit_format: editor-diff +- name: eu.anthropic.claude-opus-4-20250514-v1:0 + edit_format: diff + weak_model_name: eu.anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 32000 + cache_control: true + editor_model_name: eu.anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + +- name: eu.anthropic.claude-sonnet-4-20250514-v1:0 + edit_format: diff + weak_model_name: eu.anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: eu.anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + - name: fireworks_ai/accounts/fireworks/models/deepseek-r1 edit_format: diff weak_model_name: fireworks_ai/accounts/fireworks/models/deepseek-v3 @@ -674,9 +1023,14 @@ cog.out("```\n") editor_edit_format: editor-diff reasoning_tag: think -- name: gemini/gemini-1.5-flash-002 +- name: gemini-2.5-flash-preview-04-17 + edit_format: diff + use_repo_map: true + accepts_settings: + - reasoning_effort + - thinking_tokens -- name: gemini/gemini-1.5-flash-exp-0827 +- name: gemini/gemini-1.5-flash-002 - name: gemini/gemini-1.5-pro edit_format: diff-fenced @@ -686,10 +1040,6 @@ cog.out("```\n") edit_format: diff use_repo_map: true -- name: gemini/gemini-1.5-pro-exp-0827 - edit_format: diff-fenced - use_repo_map: true - - name: gemini/gemini-1.5-pro-latest edit_format: diff-fenced use_repo_map: true @@ -702,23 +1052,80 @@ cog.out("```\n") edit_format: diff use_repo_map: true +- name: gemini/gemini-2.5-flash + edit_format: diff-fenced + use_repo_map: true + overeager: true + use_temperature: false + accepts_settings: + - thinking_tokens + +- name: gemini/gemini-2.5-flash-lite-preview-06-17 + edit_format: diff-fenced + use_repo_map: true + overeager: true + use_temperature: false + accepts_settings: + - thinking_tokens + +- name: gemini/gemini-2.5-flash-preview-04-17 + edit_format: diff + use_repo_map: true + accepts_settings: + - reasoning_effort + - thinking_tokens + +- name: gemini/gemini-2.5-pro + edit_format: diff-fenced + weak_model_name: gemini/gemini-2.5-flash + use_repo_map: true + overeager: true + use_temperature: false + accepts_settings: + - thinking_tokens + - name: gemini/gemini-2.5-pro-exp-03-25 edit_format: diff-fenced - weak_model_name: gemini/gemini-2.0-flash + weak_model_name: gemini/gemini-2.5-flash-preview-04-17 use_repo_map: true + overeager: true - name: gemini/gemini-2.5-pro-preview-03-25 edit_format: diff-fenced weak_model_name: gemini/gemini-2.0-flash use_repo_map: true + overeager: true -- name: gemini/gemini-exp-1114 - edit_format: diff +- name: gemini/gemini-2.5-pro-preview-05-06 + edit_format: diff-fenced + weak_model_name: gemini/gemini-2.5-flash-preview-04-17 use_repo_map: true + overeager: true -- name: gemini/gemini-exp-1121 - edit_format: diff +- name: gemini/gemini-2.5-pro-preview-06-05 + edit_format: diff-fenced + weak_model_name: gemini/gemini-2.5-flash-preview-04-17 use_repo_map: true + overeager: true + accepts_settings: + - thinking_tokens + +- name: gemini/gemini-3-flash-preview + edit_format: diff-fenced + use_repo_map: true + overeager: true + use_temperature: false + accepts_settings: + - thinking_tokens + +- name: gemini/gemini-3-pro-preview + edit_format: diff-fenced + weak_model_name: gemini/gemini-2.5-flash + use_repo_map: true + overeager: true + use_temperature: false + accepts_settings: + - thinking_tokens - name: gemini/gemini-exp-1206 edit_format: diff @@ -853,6 +1260,171 @@ cog.out("```\n") lazy: true reminder: sys +- name: gpt-5 + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + overeager: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: gpt-5-2025-08-07 + edit_format: diff + weak_model_name: gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: gpt-5-chat + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: gpt-5-chat-latest + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: gpt-5-codex + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: gpt-5-mini + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: gpt-5-mini-2025-08-07 + edit_format: diff + weak_model_name: gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: gpt-5-nano + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: gpt-5-nano-2025-08-07 + edit_format: diff + weak_model_name: gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: gpt-5-pro + edit_format: diff + weak_model_name: gpt-5-mini + use_repo_map: true + examples_as_sys_msg: true + use_temperature: false + streaming: false + editor_model_name: gpt-5 + editor_edit_format: editor-diff + system_prompt_prefix: 'Formatting re-enabled. ' + accepts_settings: + - reasoning_effort + +- name: gpt-5.1 + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + overeager: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: gpt-5.1-2025-11-13 + edit_format: diff + weak_model_name: gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: gpt-5.1-chat + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: gpt-5.1-chat-latest + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: gpt-5.1-codex + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: gpt-5.2 + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + overeager: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: gpt-5.2-2025-12-11 + edit_format: diff + weak_model_name: gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: gpt-5.2-chat-latest + edit_format: diff + weak_model_name: gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: gpt-5.2-pro + edit_format: diff + weak_model_name: gpt-5-mini + use_repo_map: true + examples_as_sys_msg: true + use_temperature: false + streaming: false + editor_model_name: gpt-5.2 + editor_edit_format: editor-diff + system_prompt_prefix: 'Formatting re-enabled. ' + accepts_settings: + - reasoning_effort + - name: groq/llama3-70b-8192 edit_format: diff weak_model_name: groq/llama3-8b-8192 @@ -922,6 +1494,18 @@ cog.out("```\n") accepts_settings: - reasoning_effort +- name: o3-pro + edit_format: diff + weak_model_name: gpt-4.1-mini + use_repo_map: true + examples_as_sys_msg: true + streaming: false + editor_model_name: gpt-4.1 + editor_edit_format: editor-diff + system_prompt_prefix: 'Formatting re-enabled. ' + accepts_settings: + - reasoning_effort + - name: o4-mini edit_format: diff weak_model_name: gpt-4.1-mini @@ -986,6 +1570,152 @@ cog.out("```\n") lazy: true reminder: sys +- name: openai/gpt-5 + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openai/gpt-5-2025-08-07 + edit_format: diff + weak_model_name: openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openai/gpt-5-chat + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openai/gpt-5-chat-latest + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openai/gpt-5-mini + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openai/gpt-5-mini-2025-08-07 + edit_format: diff + weak_model_name: openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openai/gpt-5-nano + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openai/gpt-5-nano-2025-08-07 + edit_format: diff + weak_model_name: openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openai/gpt-5-pro + edit_format: diff + weak_model_name: openai/gpt-5-mini + use_repo_map: true + examples_as_sys_msg: true + use_temperature: false + streaming: false + editor_model_name: openai/gpt-5 + editor_edit_format: editor-diff + system_prompt_prefix: 'Formatting re-enabled. ' + accepts_settings: + - reasoning_effort + +- name: openai/gpt-5.1 + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openai/gpt-5.1-2025-11-13 + edit_format: diff + weak_model_name: openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openai/gpt-5.1-chat + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openai/gpt-5.1-chat-latest + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openai/gpt-5.2 + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openai/gpt-5.2-2025-12-11 + edit_format: diff + weak_model_name: openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openai/gpt-5.2-chat-latest + edit_format: diff + weak_model_name: openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openai/gpt-5.2-pro + edit_format: diff + weak_model_name: openai/gpt-5-mini + use_repo_map: true + examples_as_sys_msg: true + use_temperature: false + streaming: false + editor_model_name: openai/gpt-5.2 + editor_edit_format: editor-diff + system_prompt_prefix: 'Formatting re-enabled. ' + accepts_settings: + - reasoning_effort + - name: openai/o1 edit_format: diff weak_model_name: openai/gpt-4o-mini @@ -1038,6 +1768,18 @@ cog.out("```\n") accepts_settings: - reasoning_effort +- name: openai/o3-pro + edit_format: diff + weak_model_name: openai/gpt-4.1-mini + use_repo_map: true + examples_as_sys_msg: true + streaming: false + editor_model_name: openai/gpt-4.1 + editor_edit_format: editor-diff + system_prompt_prefix: 'Formatting re-enabled. ' + accepts_settings: + - reasoning_effort + - name: openai/o4-mini edit_format: diff weak_model_name: openai/gpt-4.1-mini @@ -1157,6 +1899,34 @@ cog.out("```\n") accepts_settings: - thinking_tokens +- name: openrouter/anthropic/claude-opus-4 + edit_format: diff + weak_model_name: openrouter/anthropic/claude-3-5-haiku + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 32000 + cache_control: true + editor_model_name: openrouter/anthropic/claude-sonnet-4 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + +- name: openrouter/anthropic/claude-sonnet-4 + edit_format: diff + weak_model_name: openrouter/anthropic/claude-3-5-haiku + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 64000 + cache_control: true + editor_model_name: openrouter/anthropic/claude-sonnet-4 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + - name: openrouter/cohere/command-a-03-2025 examples_as_sys_msg: true @@ -1172,7 +1942,7 @@ cog.out("```\n") reminder: sys examples_as_sys_msg: true extra_params: - max_tokens: 8192 + max_tokens: 65536 caches_by_default: true - name: openrouter/deepseek/deepseek-chat-v3-0324:free @@ -1236,10 +2006,54 @@ cog.out("```\n") max_tokens: 8192 caches_by_default: true -- name: openrouter/google/gemini-2.5-pro-exp-03-25:free +- name: openrouter/google/gemini-2.5-pro + edit_format: diff-fenced + weak_model_name: openrouter/google/gemini-2.5-flash + use_repo_map: true + overeager: true + accepts_settings: + - thinking_tokens + +- name: openrouter/google/gemini-2.5-pro-exp-03-25 edit_format: diff-fenced weak_model_name: openrouter/google/gemini-2.0-flash-exp:free use_repo_map: true + overeager: true + +- name: openrouter/google/gemini-2.5-pro-preview-03-25 + edit_format: diff-fenced + weak_model_name: openrouter/google/gemini-2.0-flash-001 + use_repo_map: true + overeager: true + +- name: openrouter/google/gemini-2.5-pro-preview-05-06 + edit_format: diff-fenced + weak_model_name: openrouter/google/gemini-2.0-flash-001 + use_repo_map: true + overeager: true + +- name: openrouter/google/gemini-2.5-pro-preview-06-05 + edit_format: diff-fenced + weak_model_name: openrouter/google/gemini-2.0-flash-001 + use_repo_map: true + overeager: true + accepts_settings: + - thinking_tokens + +- name: openrouter/google/gemini-3-flash-preview + edit_format: diff-fenced + use_repo_map: true + overeager: true + accepts_settings: + - thinking_tokens + +- name: openrouter/google/gemini-3-pro-preview + edit_format: diff-fenced + weak_model_name: openrouter/google/gemini-2.5-flash + use_repo_map: true + overeager: true + accepts_settings: + - thinking_tokens - name: openrouter/google/gemma-3-27b-it use_system_prompt: false @@ -1252,6 +2066,13 @@ cog.out("```\n") weak_model_name: openrouter/meta-llama/llama-3-70b-instruct examples_as_sys_msg: true +- name: openrouter/moonshotai/kimi-k2 + edit_format: diff + use_repo_map: true + examples_as_sys_msg: true + extra_params: + temperature: 0.6 + - name: openrouter/openai/gpt-4.1 edit_format: diff weak_model_name: openrouter/openai/gpt-4.1-mini @@ -1273,6 +2094,152 @@ cog.out("```\n") examples_as_sys_msg: true editor_edit_format: editor-diff +- name: openrouter/openai/gpt-5 + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openrouter/openai/gpt-5-2025-08-07 + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openrouter/openai/gpt-5-chat + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openrouter/openai/gpt-5-chat-latest + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openrouter/openai/gpt-5-mini + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openrouter/openai/gpt-5-mini-2025-08-07 + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openrouter/openai/gpt-5-nano + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openrouter/openai/gpt-5-nano-2025-08-07 + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openrouter/openai/gpt-5-pro + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-mini + use_repo_map: true + examples_as_sys_msg: true + use_temperature: false + streaming: false + editor_model_name: openrouter/openai/gpt-5 + editor_edit_format: editor-diff + system_prompt_prefix: 'Formatting re-enabled. ' + accepts_settings: + - reasoning_effort + +- name: openrouter/openai/gpt-5.1 + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openrouter/openai/gpt-5.1-2025-11-13 + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openrouter/openai/gpt-5.1-chat + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openrouter/openai/gpt-5.1-chat-latest + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openrouter/openai/gpt-5.2 + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openrouter/openai/gpt-5.2-2025-12-11 + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano-2025-08-07 + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openrouter/openai/gpt-5.2-chat-latest + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-nano + use_repo_map: true + use_temperature: false + accepts_settings: + - reasoning_effort + +- name: openrouter/openai/gpt-5.2-pro + edit_format: diff + weak_model_name: openrouter/openai/gpt-5-mini + use_repo_map: true + examples_as_sys_msg: true + use_temperature: false + streaming: false + editor_model_name: openrouter/openai/gpt-5.2 + editor_edit_format: editor-diff + system_prompt_prefix: 'Formatting re-enabled. ' + accepts_settings: + - reasoning_effort + - name: openrouter/openai/o1 edit_format: diff weak_model_name: openrouter/openai/gpt-4o-mini @@ -1338,6 +2305,18 @@ cog.out("```\n") accepts_settings: - reasoning_effort +- name: openrouter/openai/o3-pro + edit_format: diff + weak_model_name: openrouter/openai/gpt-4.1-mini + use_repo_map: true + examples_as_sys_msg: true + streaming: false + editor_model_name: openrouter/openai/gpt-4.1 + editor_edit_format: editor-diff + system_prompt_prefix: 'Formatting re-enabled. ' + accepts_settings: + - reasoning_effort + - name: openrouter/openai/o4-mini edit_format: diff weak_model_name: openrouter/openai/gpt-4.1-mini @@ -1433,15 +2412,36 @@ cog.out("```\n") accepts_settings: - reasoning_effort -- name: vertex_ai-anthropic_models/vertex_ai/claude-3-7-sonnet@20250219 +- name: openrouter/x-ai/grok-4 edit_format: diff - weak_model_name: vertex_ai/claude-3-5-haiku@20241022 use_repo_map: true - overeager: true - examples_as_sys_msg: true + accepts_settings: + - reasoning_effort + +- name: us.anthropic.claude-opus-4-20250514-v1:0 + edit_format: diff + weak_model_name: us.anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 + max_tokens: 32000 + cache_control: true + editor_model_name: us.anthropic.claude-sonnet-4-20250514-v1:0 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + +- name: us.anthropic.claude-sonnet-4-20250514-v1:0 + edit_format: diff + weak_model_name: us.anthropic.claude-3-5-haiku-20241022-v1:0 + use_repo_map: true + extra_params: + extra_headers: + anthropic-beta: prompt-caching-2024-07-31,pdfs-2024-09-25,output-128k-2025-02-19 max_tokens: 64000 - editor_model_name: vertex_ai-anthropic_models/vertex_ai/claude-3-7-sonnet@20250219 + cache_control: true + editor_model_name: us.anthropic.claude-sonnet-4-20250514-v1:0 editor_edit_format: editor-diff accepts_settings: - thinking_tokens @@ -1486,6 +2486,19 @@ cog.out("```\n") accepts_settings: - thinking_tokens +- name: vertex_ai/claude-3-7-sonnet@20250219 + edit_format: diff + weak_model_name: vertex_ai/claude-3-5-haiku@20241022 + use_repo_map: true + overeager: true + examples_as_sys_msg: true + extra_params: + max_tokens: 64000 + editor_model_name: vertex_ai/claude-3-7-sonnet@20250219 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + - name: vertex_ai/claude-3-opus@20240229 edit_format: diff weak_model_name: vertex_ai/claude-3-5-haiku@20241022 @@ -1494,17 +2507,125 @@ cog.out("```\n") - name: vertex_ai/claude-3-sonnet@20240229 weak_model_name: vertex_ai/claude-3-5-haiku@20241022 -- name: vertex_ai/gemini-2.5-pro-exp-03-25 +- name: vertex_ai/claude-opus-4@20250514 + edit_format: diff + weak_model_name: vertex_ai/claude-3-5-haiku@20241022 + use_repo_map: true + extra_params: + max_tokens: 32000 + editor_model_name: vertex_ai/claude-sonnet-4@20250514 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + +- name: vertex_ai/claude-opus-4@20250514 + edit_format: diff + weak_model_name: vertex_ai/claude-3-5-haiku@20241022 + use_repo_map: true + extra_params: + max_tokens: 32000 + editor_model_name: vertex_ai/claude-sonnet-4@20250514 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + +- name: vertex_ai/claude-sonnet-4@20250514 + edit_format: diff + weak_model_name: vertex_ai/claude-3-5-haiku@20241022 + use_repo_map: true + extra_params: + max_tokens: 64000 + editor_model_name: vertex_ai/claude-sonnet-4@20250514 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + +- name: vertex_ai/claude-sonnet-4@20250514 + edit_format: diff + weak_model_name: vertex_ai/claude-3-5-haiku@20241022 + use_repo_map: true + extra_params: + max_tokens: 64000 + editor_model_name: vertex_ai/claude-sonnet-4@20250514 + editor_edit_format: editor-diff + accepts_settings: + - thinking_tokens + +- name: vertex_ai/gemini-2.5-flash edit_format: diff-fenced use_repo_map: true + overeager: true + accepts_settings: + - thinking_tokens + +- name: vertex_ai/gemini-2.5-flash-preview-04-17 + edit_format: diff + use_repo_map: true + accepts_settings: + - reasoning_effort + - thinking_tokens + +- name: vertex_ai/gemini-2.5-flash-preview-05-20 + edit_format: diff + use_repo_map: true + accepts_settings: + - reasoning_effort + - thinking_tokens + +- name: vertex_ai/gemini-2.5-pro + edit_format: diff-fenced + weak_model_name: vertex_ai/gemini-2.5-flash + use_repo_map: true + overeager: true + editor_model_name: vertex_ai/gemini-2.5-flash + accepts_settings: + - thinking_tokens + +- name: vertex_ai/gemini-2.5-pro-exp-03-25 + edit_format: diff-fenced + weak_model_name: vertex_ai/gemini-2.5-flash-preview-04-17 + use_repo_map: true + overeager: true + editor_model_name: vertex_ai/gemini-2.5-flash-preview-04-17 - name: vertex_ai/gemini-2.5-pro-preview-03-25 edit_format: diff-fenced + weak_model_name: vertex_ai/gemini-2.5-flash-preview-04-17 use_repo_map: true + overeager: true + editor_model_name: vertex_ai/gemini-2.5-flash-preview-04-17 -- name: vertex_ai/gemini-pro-experimental +- name: vertex_ai/gemini-2.5-pro-preview-05-06 + edit_format: diff-fenced + weak_model_name: vertex_ai/gemini-2.5-flash-preview-04-17 + use_repo_map: true + overeager: true + editor_model_name: vertex_ai/gemini-2.5-flash-preview-04-17 + +- name: vertex_ai/gemini-2.5-pro-preview-06-05 + edit_format: diff-fenced + weak_model_name: vertex_ai/gemini-2.5-flash-preview-04-17 + use_repo_map: true + overeager: true + editor_model_name: vertex_ai/gemini-2.5-flash-preview-04-17 + accepts_settings: + - thinking_tokens + +- name: vertex_ai/gemini-3-flash-preview edit_format: diff-fenced use_repo_map: true + overeager: true + accepts_settings: + - thinking_tokens + +- name: vertex_ai/gemini-3-pro-preview + edit_format: diff-fenced + weak_model_name: vertex_ai/gemini-2.5-flash + use_repo_map: true + overeager: true + editor_model_name: vertex_ai/gemini-2.5-flash + accepts_settings: + - thinking_tokens - name: xai/grok-3-beta edit_format: diff @@ -1523,6 +2644,12 @@ cog.out("```\n") use_repo_map: true accepts_settings: - reasoning_effort + +- name: xai/grok-4 + edit_format: diff + use_repo_map: true + accepts_settings: + - reasoning_effort ``` diff --git a/aider/website/docs/config/aider_conf.md b/aider/website/docs/config/aider_conf.md index 40483ae4b..bd5ea6246 100644 --- a/aider/website/docs/config/aider_conf.md +++ b/aider/website/docs/config/aider_conf.md @@ -1,7 +1,7 @@ --- parent: Configuration nav_order: 15 -description: How to configure aider with a yaml config file. +description: How to configure aider with a YAML config file. --- # YAML config file @@ -58,7 +58,7 @@ cog.outl("```") # Place in your home dir, or at the root of your git repo. ########################################################## -# Note: You can only put OpenAI and Anthropic API keys in the yaml +# Note: You can only put OpenAI and Anthropic API keys in the YAML # config file. Keys for all APIs can be stored in a .env file # https://aider.chat/docs/config/dotenv.html @@ -137,7 +137,7 @@ cog.outl("```") ## Set the reasoning_effort API parameter (default: not set) #reasoning-effort: xxx -## Set the thinking token budget for models that support it (default: not set) +## Set the thinking token budget for models that support it. Use 0 to disable. (default: not set) #thinking-tokens: xxx ## Verify the SSL cert when connecting to models (default: True) @@ -266,6 +266,9 @@ cog.outl("```") ## Enable/disable adding .aider* to .gitignore (default: True) #gitignore: true +## Enable/disable the addition of files listed in .gitignore to Aider's editing scope. +#add-gitignore-files: false + ## Specify the aider ignore file (default: .aiderignore in git root) #aiderignore: .aiderignore @@ -278,11 +281,11 @@ cog.outl("```") ## Enable/disable commits when repo is found dirty (default: True) #dirty-commits: true -## Attribute aider code changes in the git author name (default: True) -#attribute-author: true +## Attribute aider code changes in the git author name (default: True). If explicitly set to True, overrides --attribute-co-authored-by precedence. +#attribute-author: xxx -## Attribute aider commits in the git committer name (default: True) -#attribute-committer: true +## Attribute aider commits in the git committer name (default: True). If explicitly set to True, overrides --attribute-co-authored-by precedence for aider edits. +#attribute-committer: xxx ## Prefix commit messages with 'aider: ' if aider authored the changes (default: False) #attribute-commit-message-author: false @@ -290,6 +293,9 @@ cog.outl("```") ## Prefix all commit messages with 'aider: ' (default: False) #attribute-commit-message-committer: false +## Attribute aider edits using the Co-authored-by trailer in the commit message (default: True). If True, this takes precedence over default --attribute-author and --attribute-committer behavior unless they are explicitly set to True. +#attribute-co-authored-by: true + ## Enable/disable git pre-commit hooks with --no-verify (default: False) #git-commit-verify: false @@ -346,6 +352,12 @@ cog.outl("```") ## Permanently disable analytics #analytics-disable: false +## Send analytics to custom PostHog instance +#analytics-posthog-host: xxx + +## Send analytics to custom PostHog project +#analytics-posthog-project-api-key: xxx + ############ # Upgrading: @@ -412,6 +424,9 @@ cog.outl("```") ################# # Other settings: +## Never prompt for or attempt to install Playwright for web scraping (default: False). +#disable-playwright: false + ## specify a file to edit (can be used multiple times) #file: xxx ## Specify multiple values like this: @@ -434,6 +449,9 @@ cog.outl("```") ## Specify the language to use in the chat (default: None, uses system settings) #chat-language: xxx +## Specify the language to use in the commit message (default: None, user language) +#commit-language: xxx + ## Always say yes to every confirmation #yes-always: false @@ -476,6 +494,9 @@ cog.outl("```") ## Specify which editor to use for the /editor command #editor: xxx +## Print shell completion script for the specified SHELL and exit. Supported shells: bash, tcsh, zsh. Example: aider --shell-completions bash +#shell-completions: xxx + ############################ # Deprecated model settings: diff --git a/aider/website/docs/config/api-keys.md b/aider/website/docs/config/api-keys.md index f353579f1..3be726aa2 100644 --- a/aider/website/docs/config/api-keys.md +++ b/aider/website/docs/config/api-keys.md @@ -40,9 +40,9 @@ OPENAI_API_KEY= ANTHROPIC_API_KEY= ``` -#### Yaml config file +#### YAML config file You can also set those API keys via special entries in the -[yaml config file](/docs/config/aider_conf.html), like this: +[YAML config file](/docs/config/aider_conf.html), like this: ```yaml openai-api-key: @@ -74,7 +74,7 @@ OPENROUTER_API_KEY=bar DEEPSEEK_API_KEY=baz ``` -#### Yaml config file +#### YAML config file You can also set API keys in the diff --git a/aider/website/docs/config/dotenv.md b/aider/website/docs/config/dotenv.md index 5a1c616e8..11681bf07 100644 --- a/aider/website/docs/config/dotenv.md +++ b/aider/website/docs/config/dotenv.md @@ -112,7 +112,7 @@ cog.outl("```") ## Set the reasoning_effort API parameter (default: not set) #AIDER_REASONING_EFFORT= -## Set the thinking token budget for models that support it (default: not set) +## Set the thinking token budget for models that support it. Use 0 to disable. (default: not set) #AIDER_THINKING_TOKENS= ## Verify the SSL cert when connecting to models (default: True) @@ -241,6 +241,9 @@ cog.outl("```") ## Enable/disable adding .aider* to .gitignore (default: True) #AIDER_GITIGNORE=true +## Enable/disable the addition of files listed in .gitignore to Aider's editing scope. +#AIDER_ADD_GITIGNORE_FILES=false + ## Specify the aider ignore file (default: .aiderignore in git root) #AIDER_AIDERIGNORE=.aiderignore @@ -253,11 +256,11 @@ cog.outl("```") ## Enable/disable commits when repo is found dirty (default: True) #AIDER_DIRTY_COMMITS=true -## Attribute aider code changes in the git author name (default: True) -#AIDER_ATTRIBUTE_AUTHOR=true +## Attribute aider code changes in the git author name (default: True). If explicitly set to True, overrides --attribute-co-authored-by precedence. +#AIDER_ATTRIBUTE_AUTHOR= -## Attribute aider commits in the git committer name (default: True) -#AIDER_ATTRIBUTE_COMMITTER=true +## Attribute aider commits in the git committer name (default: True). If explicitly set to True, overrides --attribute-co-authored-by precedence for aider edits. +#AIDER_ATTRIBUTE_COMMITTER= ## Prefix commit messages with 'aider: ' if aider authored the changes (default: False) #AIDER_ATTRIBUTE_COMMIT_MESSAGE_AUTHOR=false @@ -265,6 +268,9 @@ cog.outl("```") ## Prefix all commit messages with 'aider: ' (default: False) #AIDER_ATTRIBUTE_COMMIT_MESSAGE_COMMITTER=false +## Attribute aider edits using the Co-authored-by trailer in the commit message (default: True). If True, this takes precedence over default --attribute-author and --attribute-committer behavior unless they are explicitly set to True. +#AIDER_ATTRIBUTE_CO_AUTHORED_BY=true + ## Enable/disable git pre-commit hooks with --no-verify (default: False) #AIDER_GIT_COMMIT_VERIFY=false @@ -316,6 +322,12 @@ cog.outl("```") ## Permanently disable analytics #AIDER_ANALYTICS_DISABLE=false +## Send analytics to custom PostHog instance +#AIDER_ANALYTICS_POSTHOG_HOST= + +## Send analytics to custom PostHog project +#AIDER_ANALYTICS_POSTHOG_PROJECT_API_KEY= + ############ # Upgrading: @@ -379,6 +391,9 @@ cog.outl("```") ################# # Other settings: +## Never prompt for or attempt to install Playwright for web scraping (default: False). +#AIDER_DISABLE_PLAYWRIGHT=false + ## specify a file to edit (can be used multiple times) #AIDER_FILE= @@ -391,6 +406,9 @@ cog.outl("```") ## Specify the language to use in the chat (default: None, uses system settings) #AIDER_CHAT_LANGUAGE= +## Specify the language to use in the commit message (default: None, user language) +#AIDER_COMMIT_LANGUAGE= + ## Always say yes to every confirmation #AIDER_YES_ALWAYS= @@ -430,6 +448,9 @@ cog.outl("```") ## Specify which editor to use for the /editor command #AIDER_EDITOR= +## Print shell completion script for the specified SHELL and exit. Supported shells: bash, tcsh, zsh. Example: aider --shell-completions bash +#AIDER_SHELL_COMPLETIONS= + ############################ # Deprecated model settings: diff --git a/aider/website/docs/config/editor.md b/aider/website/docs/config/editor.md index aff3e376c..dc1d74df8 100644 --- a/aider/website/docs/config/editor.md +++ b/aider/website/docs/config/editor.md @@ -12,7 +12,7 @@ Aider allows you to configure your preferred text editor for use with the `/edit You can specify the text editor with the `--editor` switch or using `editor:` in aider's -[yaml config file](https://aider.chat/docs/config/aider_conf.html). +[YAML config file](https://aider.chat/docs/config/aider_conf.html). ## Environment variables diff --git a/aider/website/docs/config/model-aliases.md b/aider/website/docs/config/model-aliases.md index a9b218f47..c27b34da0 100644 --- a/aider/website/docs/config/model-aliases.md +++ b/aider/website/docs/config/model-aliases.md @@ -79,17 +79,19 @@ for alias, model in sorted(MODEL_ALIASES.items()): - `4-turbo`: gpt-4-1106-preview - `4o`: gpt-4o - `deepseek`: deepseek/deepseek-chat -- `flash`: gemini/gemini-2.0-flash-exp -- `gemini`: gemini/gemini-2.5-pro-preview-03-25 -- `gemini-2.5-pro`: gemini/gemini-2.5-pro-exp-03-25 +- `flash`: gemini/gemini-2.5-flash +- `flash-lite`: gemini/gemini-2.5-flash-lite +- `gemini`: gemini/gemini-3-pro-preview +- `gemini-2.5-pro`: gemini/gemini-2.5-pro +- `gemini-3-pro-preview`: gemini/gemini-3-pro-preview - `gemini-exp`: gemini/gemini-2.5-pro-exp-03-25 - `grok3`: xai/grok-3-beta - `haiku`: claude-3-5-haiku-20241022 - `optimus`: openrouter/openrouter/optimus-alpha -- `opus`: claude-3-opus-20240229 +- `opus`: claude-opus-4-20250514 - `quasar`: openrouter/openrouter/quasar-alpha - `r1`: deepseek/deepseek-reasoner -- `sonnet`: anthropic/claude-3-7-sonnet-20250219 +- `sonnet`: anthropic/claude-sonnet-4-20250514 ## Priority diff --git a/aider/website/docs/config/options.md b/aider/website/docs/config/options.md index d07234921..c974f671b 100644 --- a/aider/website/docs/config/options.md +++ b/aider/website/docs/config/options.md @@ -49,13 +49,16 @@ usage: aider [-h] [--model] [--openai-api-key] [--anthropic-api-key] [--completion-menu-current-color] [--completion-menu-current-bg-color] [--code-theme] [--show-diffs] [--git | --no-git] - [--gitignore | --no-gitignore] [--aiderignore] - [--subtree-only] [--auto-commits | --no-auto-commits] + [--gitignore | --no-gitignore] + [--add-gitignore-files | --no-add-gitignore-files] + [--aiderignore] [--subtree-only] + [--auto-commits | --no-auto-commits] [--dirty-commits | --no-dirty-commits] [--attribute-author | --no-attribute-author] [--attribute-committer | --no-attribute-committer] [--attribute-commit-message-author | --no-attribute-commit-message-author] [--attribute-commit-message-committer | --no-attribute-commit-message-committer] + [--attribute-co-authored-by | --no-attribute-co-authored-by] [--git-commit-verify | --no-git-commit-verify] [--commit] [--commit-prompt] [--dry-run | --no-dry-run] [--skip-sanity-check-repo] @@ -63,7 +66,9 @@ usage: aider [-h] [--model] [--openai-api-key] [--anthropic-api-key] [--lint-cmd] [--auto-lint | --no-auto-lint] [--test-cmd] [--auto-test | --no-auto-test] [--test] [--analytics | --no-analytics] [--analytics-log] - [--analytics-disable] [--just-check-update] + [--analytics-disable] [--analytics-posthog-host] + [--analytics-posthog-project-api-key] + [--just-check-update] [--check-update | --no-check-update] [--show-release-notes | --no-show-release-notes] [--install-main-branch] [--upgrade] [--version] @@ -72,17 +77,19 @@ usage: aider [-h] [--model] [--openai-api-key] [--anthropic-api-key] [--copy-paste | --no-copy-paste] [--apply] [--apply-clipboard-edits] [--exit] [--show-repo-map] [--show-prompts] [--voice-format] [--voice-language] - [--voice-input-device] [--file] [--read] [--vim] - [--chat-language] [--yes-always] [-v] [--load] - [--encoding] [--line-endings] [-c] [--env-file] + [--voice-input-device] [--disable-playwright] [--file] + [--read] [--vim] [--chat-language] [--commit-language] + [--yes-always] [-v] [--load] [--encoding] + [--line-endings] [-c] [--env-file] [--suggest-shell-commands | --no-suggest-shell-commands] [--fancy-input | --no-fancy-input] [--multiline | --no-multiline] [--notifications | --no-notifications] [--notifications-command] - [--detect-urls | --no-detect-urls] [--editor] [--opus] - [--sonnet] [--haiku] [--4] [--4o] [--mini] [--4-turbo] - [--35turbo] [--deepseek] [--o1-mini] [--o1-preview] + [--detect-urls | --no-detect-urls] [--editor] + [--shell-completions] [--opus] [--sonnet] [--haiku] + [--4] [--4o] [--mini] [--4-turbo] [--35turbo] + [--deepseek] [--o1-mini] [--o1-preview] ``` @@ -168,7 +175,7 @@ Set the reasoning_effort API parameter (default: not set) Environment variable: `AIDER_REASONING_EFFORT` ### `--thinking-tokens VALUE` -Set the thinking token budget for models that support it (default: not set) +Set the thinking token budget for models that support it. Use 0 to disable. (default: not set) Environment variable: `AIDER_THINKING_TOKENS` ### `--verify-ssl` @@ -385,6 +392,14 @@ Aliases: - `--gitignore` - `--no-gitignore` +### `--add-gitignore-files` +Enable/disable the addition of files listed in .gitignore to Aider's editing scope. +Default: False +Environment variable: `AIDER_ADD_GITIGNORE_FILES` +Aliases: + - `--add-gitignore-files` + - `--no-add-gitignore-files` + ### `--aiderignore AIDERIGNORE` Specify the aider ignore file (default: .aiderignore in git root) Default: .aiderignore @@ -412,16 +427,14 @@ Aliases: - `--no-dirty-commits` ### `--attribute-author` -Attribute aider code changes in the git author name (default: True) -Default: True +Attribute aider code changes in the git author name (default: True). If explicitly set to True, overrides --attribute-co-authored-by precedence. Environment variable: `AIDER_ATTRIBUTE_AUTHOR` Aliases: - `--attribute-author` - `--no-attribute-author` ### `--attribute-committer` -Attribute aider commits in the git committer name (default: True) -Default: True +Attribute aider commits in the git committer name (default: True). If explicitly set to True, overrides --attribute-co-authored-by precedence for aider edits. Environment variable: `AIDER_ATTRIBUTE_COMMITTER` Aliases: - `--attribute-committer` @@ -443,6 +456,14 @@ Aliases: - `--attribute-commit-message-committer` - `--no-attribute-commit-message-committer` +### `--attribute-co-authored-by` +Attribute aider edits using the Co-authored-by trailer in the commit message (default: True). If True, this takes precedence over default --attribute-author and --attribute-committer behavior unless they are explicitly set to True. +Default: True +Environment variable: `AIDER_ATTRIBUTE_CO_AUTHORED_BY` +Aliases: + - `--attribute-co-authored-by` + - `--no-attribute-co-authored-by` + ### `--git-commit-verify` Enable/disable git pre-commit hooks with --no-verify (default: False) Default: False @@ -537,6 +558,14 @@ Permanently disable analytics Default: False Environment variable: `AIDER_ANALYTICS_DISABLE` +### `--analytics-posthog-host ANALYTICS_POSTHOG_HOST` +Send analytics to custom PostHog instance +Environment variable: `AIDER_ANALYTICS_POSTHOG_HOST` + +### `--analytics-posthog-project-api-key ANALYTICS_POSTHOG_PROJECT_API_KEY` +Send analytics to custom PostHog project +Environment variable: `AIDER_ANALYTICS_POSTHOG_PROJECT_API_KEY` + ## Upgrading: ### `--just-check-update` @@ -652,6 +681,11 @@ Environment variable: `AIDER_VOICE_INPUT_DEVICE` ## Other settings: +### `--disable-playwright` +Never prompt for or attempt to install Playwright for web scraping (default: False). +Default: False +Environment variable: `AIDER_DISABLE_PLAYWRIGHT` + ### `--file FILE` specify a file to edit (can be used multiple times) Environment variable: `AIDER_FILE` @@ -669,6 +703,10 @@ Environment variable: `AIDER_VIM` Specify the language to use in the chat (default: None, uses system settings) Environment variable: `AIDER_CHAT_LANGUAGE` +### `--commit-language COMMIT_LANGUAGE` +Specify the language to use in the commit message (default: None, user language) +Environment variable: `AIDER_COMMIT_LANGUAGE` + ### `--yes-always` Always say yes to every confirmation Environment variable: `AIDER_YES_ALWAYS` @@ -754,6 +792,10 @@ Aliases: Specify which editor to use for the /editor command Environment variable: `AIDER_EDITOR` +### `--shell-completions SHELL` +Print shell completion script for the specified SHELL and exit. Supported shells: bash, tcsh, zsh. Example: aider --shell-completions bash +Environment variable: `AIDER_SHELL_COMPLETIONS` + ## Deprecated model settings: ### `--opus` diff --git a/aider/website/docs/config/reasoning.md b/aider/website/docs/config/reasoning.md index 168516feb..bbdeaa7f9 100644 --- a/aider/website/docs/config/reasoning.md +++ b/aider/website/docs/config/reasoning.md @@ -25,7 +25,7 @@ aider --model r1 ``` Inside the aider chat, you can use `/thinking-tokens 4k` or `/reasoning-effort low` to change -the amount of reasoning. +the amount of reasoning. Use `/thinking-tokens 0` to disable thinking tokens. The rest of this document describes more advanced details which are mainly needed if you're configuring aider to work with a lesser known reasoning model or one served @@ -47,6 +47,7 @@ You can use the `--thinking-tokens` switch to request the model use a certain number of thinking tokens. This switch is useful for Sonnet 3.7. You can specify the token budget like "1024", "1k", "8k" or "0.01M". +Use "0" to disable thinking tokens. ### Model compatibility and settings diff --git a/aider/website/docs/faq.md b/aider/website/docs/faq.md index d76f5846e..0a913cb14 100644 --- a/aider/website/docs/faq.md +++ b/aider/website/docs/faq.md @@ -264,20 +264,15 @@ tr:hover { background-color: #f5f5f5; } - - - - - - - - - + + + + + + + +
Model NameTotal TokensPercent
gemini/gemini-2.5-pro-exp-03-252,499,33883.9%
openrouter/anthropic/claude-3.7-sonnet313,37710.5%
o3100,7773.4%
gemini/gemini-2.5-pro-preview-03-2516,5240.6%
o4-mini16,4990.6%
gpt-4.1-mini11,7750.4%
gpt-4.110,6870.4%
None8,0010.3%
gemini/REDACTED6060.0%
gemini/gemini-2.5-pro222,04723.7%
gpt-5211,07222.6%
gemini/gemini-3-flash-preview187,83620.1%
None168,98818.1%
gemini/gemini-3-pro-preview81,8518.8%
o3-pro36,6203.9%
gemini/gemini-2.5-flash-lite15,4701.7%
gemini/gemini-2.5-flash-lite-preview-06-1711,3711.2%
- -{: .note :} -Some models show as REDACTED, because they are new or unpopular models. -Aider's analytics only records the names of "well known" LLMs. ## How are the "aider wrote xx% of code" stats computed? @@ -376,6 +371,10 @@ Aider is under an [Apache 2.0 license](https://github.com/Aider-AI/aider/blob/main/LICENSE.txt). +## Can I Script Aider? + +Yes. You can script aider via the command line or python. See more from here: [Scripting aider](https://aider.chat/docs/scripting.html) +
diff --git a/aider/website/docs/git.md b/aider/website/docs/git.md index 00ee5a272..572e1b703 100644 --- a/aider/website/docs/git.md +++ b/aider/website/docs/git.md @@ -71,4 +71,6 @@ Additionally, you can use the following options to prefix commit messages: - `--attribute-commit-message-author`: Prefix commit messages with 'aider: ' if aider authored the changes. - `--attribute-commit-message-committer`: Prefix all commit messages with 'aider: ', regardless of whether aider authored the changes or not. -Both of these options are disabled by default, but can be useful for easily identifying changes made by aider. +Finally, you can use `--attribute-co-authored-by` to have aider append a Co-authored-by trailer to the end of the commit string. +This will disable appending `(aider)` to the git author and git committer unless you have explicitly enabled those settings. + diff --git a/aider/website/docs/install.md b/aider/website/docs/install.md index 024c76f34..0ebf1d2e2 100644 --- a/aider/website/docs/install.md +++ b/aider/website/docs/install.md @@ -28,12 +28,6 @@ These one-liners will install aider, along with python 3.12 if needed. They are based on the [uv installers](https://docs.astral.sh/uv/getting-started/installation/). -#### Windows - -```powershell -powershell -ExecutionPolicy ByPass -c "irm https://aider.chat/install.ps1 | iex" -``` - #### Mac & Linux Use curl to download the script and execute it with sh: @@ -48,6 +42,12 @@ If your system doesn't have curl, you can use wget: wget -qO- https://aider.chat/install.sh | sh ``` +#### Windows + +```powershell +powershell -ExecutionPolicy ByPass -c "irm https://aider.chat/install.ps1 | iex" +``` + ## Install with uv @@ -55,7 +55,7 @@ You can install aider with uv: ```bash python -m pip install uv # If you need to install uv -uv tool install --force --python python3.12 aider-chat@latest +uv tool install --force --python python3.12 --with pip aider-chat@latest ``` This will install uv using your existing python version 3.8-3.13, diff --git a/aider/website/docs/languages.md b/aider/website/docs/languages.md index ff9c14bfc..9bf2f20a7 100644 --- a/aider/website/docs/languages.md +++ b/aider/website/docs/languages.md @@ -77,10 +77,10 @@ cog.out(get_supported_languages_md()) | capnp | .capnp | | βœ“ | | chatito | .chatito | βœ“ | βœ“ | | clarity | .clar | | βœ“ | -| clojure | .clj | | βœ“ | -| clojure | .cljc | | βœ“ | -| clojure | .cljs | | βœ“ | -| clojure | .edn | | βœ“ | +| clojure | .clj | βœ“ | βœ“ | +| clojure | .cljc | βœ“ | βœ“ | +| clojure | .cljs | βœ“ | βœ“ | +| clojure | .edn | βœ“ | βœ“ | | cmake | .cmake | | βœ“ | | cmake | CMakeLists.txt | | βœ“ | | commonlisp | .cl | βœ“ | βœ“ | @@ -110,11 +110,11 @@ cog.out(get_supported_languages_md()) | fennel | .fnl | | βœ“ | | firrtl | .fir | | βœ“ | | fish | .fish | | βœ“ | -| fortran | .f | | βœ“ | -| fortran | .f03 | | βœ“ | -| fortran | .f08 | | βœ“ | -| fortran | .f90 | | βœ“ | -| fortran | .f95 | | βœ“ | +| fortran | .f | βœ“ | βœ“ | +| fortran | .f03 | βœ“ | βœ“ | +| fortran | .f08 | βœ“ | βœ“ | +| fortran | .f90 | βœ“ | βœ“ | +| fortran | .f95 | βœ“ | βœ“ | | func | .fc | | βœ“ | | gdscript | .gd | | βœ“ | | gitattributes | .gitattributes | | βœ“ | @@ -133,7 +133,7 @@ cog.out(get_supported_languages_md()) | gstlaunch | .launch | | βœ“ | | hack | .hack | | βœ“ | | hare | .ha | | βœ“ | -| haskell | .hs | | βœ“ | +| haskell | .hs | βœ“ | βœ“ | | haxe | .hx | | βœ“ | | hcl | .hcl | βœ“ | βœ“ | | hcl | .tf | βœ“ | βœ“ | @@ -153,7 +153,7 @@ cog.out(get_supported_languages_md()) | json | .json | | βœ“ | | jsonnet | .jsonnet | | βœ“ | | jsonnet | .libsonnet | | βœ“ | -| julia | .jl | | βœ“ | +| julia | .jl | βœ“ | βœ“ | | kconfig | Kconfig | | βœ“ | | kdl | .kdl | | βœ“ | | kotlin | .kt | βœ“ | βœ“ | @@ -172,14 +172,16 @@ cog.out(get_supported_languages_md()) | make | Makefile | | βœ“ | | markdown | .markdown | | βœ“ | | markdown | .md | | βœ“ | -| matlab | .m | | βœ“ | -| matlab | .mat | | βœ“ | +| matlab | .m | βœ“ | βœ“ | +| matlab | .mat | βœ“ | βœ“ | | mermaid | .mermaid | | βœ“ | | meson | meson.build | | βœ“ | | ninja | .ninja | | βœ“ | | nix | .nix | | βœ“ | | nqc | .nqc | | βœ“ | | objc | .mm | | βœ“ | +| ocaml | .ml | βœ“ | βœ“ | +| ocaml_interface | .mli | βœ“ | βœ“ | | odin | .odin | | βœ“ | | org | .org | | βœ“ | | pascal | .pas | | βœ“ | @@ -255,7 +257,7 @@ cog.out(get_supported_languages_md()) | xml | .xml | | βœ“ | | xml | .xsl | | βœ“ | | yuck | .yuck | | βœ“ | -| zig | .zig | | βœ“ | +| zig | .zig | βœ“ | βœ“ | diff --git a/aider/website/docs/leaderboards/index.md b/aider/website/docs/leaderboards/index.md index fa03fb2d7..e3072f99e 100644 --- a/aider/website/docs/leaderboards/index.md +++ b/aider/website/docs/leaderboards/index.md @@ -285,6 +285,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.')}") ]]]--> -April 20, 2025. +November 20, 2025.

diff --git a/aider/website/docs/leaderboards/notes.md b/aider/website/docs/leaderboards/notes.md index 30c015ca6..bd85c8070 100644 --- a/aider/website/docs/leaderboards/notes.md +++ b/aider/website/docs/leaderboards/notes.md @@ -9,8 +9,7 @@ nav_order: 800 All pricing information is the cost to run the benchmark at the time it was run. -Providers change their pricing, and every benchmark run ends up with a slightly -different cost. +Providers change their pricing and sometimes introduce entirely novel pricing structures. Pricing is provided on a *best efforts* basis, and may not always be current or fully accurate. diff --git a/aider/website/docs/llms.md b/aider/website/docs/llms.md index 23d4007a7..c2475431c 100644 --- a/aider/website/docs/llms.md +++ b/aider/website/docs/llms.md @@ -16,9 +16,10 @@ description: Aider can connect to most LLMs for AI pair programming. Aider works best with these models, which are skilled at editing code: +- [Gemini 2.5 Pro](/docs/llms/gemini.html) - [DeepSeek R1 and V3](/docs/llms/deepseek.html) - [Claude 3.7 Sonnet](/docs/llms/anthropic.html) -- [OpenAI o1, o3-mini and GPT-4o](/docs/llms/openai.html) +- [OpenAI o3, o4-mini and GPT-4.1](/docs/llms/openai.html) ## Free models @@ -26,10 +27,8 @@ Aider works best with these models, which are skilled at editing code: Aider works with a number of **free** API providers: -- Google's [Gemini 1.5 Pro](/docs/llms/gemini.html) works with aider, with -code editing capabilities similar to GPT-3.5. -- You can use [Llama 3 70B on Groq](/docs/llms/groq.html) which is comparable to GPT-3.5 in code editing performance. -- Cohere also offers free API access to their [Command-R+ model](/docs/llms/cohere.html), which works with aider as a *very basic* coding assistant. +- [OpenRouter offers free access to many models](https://openrouter.ai/models/?q=free), with limitations on daily usage. +- Google's [Gemini 2.5 Pro Exp](/docs/llms/gemini.html) works very well with aider. ## Local models {: .no_toc } diff --git a/aider/website/docs/llms/anthropic.md b/aider/website/docs/llms/anthropic.md index cf69ab610..26748b101 100644 --- a/aider/website/docs/llms/anthropic.md +++ b/aider/website/docs/llms/anthropic.md @@ -10,21 +10,26 @@ To work with Anthropic's models, you need to provide your either in the `ANTHROPIC_API_KEY` environment variable or via the `--anthropic-api-key` command line switch. -Aider has some built in shortcuts for the most popular Anthropic models and -has been tested and benchmarked to work well with them: +First, install aider: + +{% include install.md %} + +Then configure your API keys: ``` -python -m pip install -U aider-chat - export ANTHROPIC_API_KEY= # Mac/Linux setx ANTHROPIC_API_KEY # Windows, restart shell after setx +``` + +Start working with aider and Anthropic on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project # Aider uses Claude 3.7 Sonnet by default aider -# Claude 3 Opus -aider --model claude-3-opus-20240229 - # List models available from Anthropic aider --list-models anthropic/ ``` diff --git a/aider/website/docs/llms/azure.md b/aider/website/docs/llms/azure.md index c342ec700..7e20fc83d 100644 --- a/aider/website/docs/llms/azure.md +++ b/aider/website/docs/llms/azure.md @@ -7,9 +7,13 @@ nav_order: 500 Aider can connect to the OpenAI models on Azure. -``` -python -m pip install -U aider-chat +First, install aider: +{% include install.md %} + +Then configure your API keys and endpoint: + +``` # Mac/Linux: export AZURE_API_KEY= export AZURE_API_VERSION=2024-12-01-preview @@ -20,6 +24,13 @@ setx AZURE_API_KEY setx AZURE_API_VERSION 2024-12-01-preview setx AZURE_API_BASE https://myendpt.openai.azure.com # ... restart your shell after setx commands +``` + +Start working with aider and Azure on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project aider --model azure/ diff --git a/aider/website/docs/llms/bedrock.md b/aider/website/docs/llms/bedrock.md index c7705918f..51a7d0822 100644 --- a/aider/website/docs/llms/bedrock.md +++ b/aider/website/docs/llms/bedrock.md @@ -6,8 +6,6 @@ nav_order: 560 # Amazon Bedrock Aider can connect to models provided by Amazon Bedrock. -You will need to have an AWS account with access to the Bedrock service. - To configure Aider to use the Amazon Bedrock API, you need to set up your AWS credentials. This can be done using the AWS CLI or by setting environment variables. @@ -37,6 +35,14 @@ feature, you will receive an error message like the following: anthropic.claude-3-7-sonnet-20250219-v1:0 with on-demand throughput isn\xe2\x80\x99t supported. Retry your request with the ID or ARN of an inference profile that contains this model."}' +## Installation and Configuration + +First, install aider: + +{% include install.md %} + +Next, configure your AWS credentials. This can be done using the AWS CLI or by setting environment variables. + ## AWS CLI Configuration If you haven't already, install the [AWS CLI](https://aws.amazon.com/cli/) and configure it with your credentials: @@ -49,7 +55,7 @@ This will prompt you to enter your AWS Access Key ID, Secret Access Key, and def ## Environment Variables -Alternatively, you can set the following environment variables: +You can set the following environment variables: ```bash export AWS_REGION=your_preferred_region @@ -75,32 +81,15 @@ $env:AWS_SECRET_ACCESS_KEY = 'your_secret_key' $env:AWS_REGION = 'us-west-2' # Put whichever AWS region that you'd like, that the Bedrock service supports. ``` -## Install boto3 -The AWS Bedrock provider requires the `boto3` package in order to function correctly: - -```bash -pip install boto3 -``` - -To use aider installed via `pipx` with AWS Bedrock, you must add the `boto3` dependency to aider's virtual environment by running - -```bash -pipx inject aider-chat boto3 -``` - -You must install `boto3` dependency to aider's virtual environment installed via one-liner or uv by running - -```bash -uv tool run --from aider-chat pip install boto3 -``` - - -## Running Aider with Bedrock +## Get Started Once your AWS credentials are set up, you can run Aider with the `--model` command line switch, specifying the Bedrock model you want to use: ```bash +# Change directory into your codebase +cd /to/your/project + aider --model bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0 ``` @@ -121,6 +110,20 @@ aider --list-models bedrock/ Make sure you have access to these models in your AWS account before attempting to use them with Aider. +## Install boto3 +You may need to install the `boto3` package. + +```bash +# If you installed with aider-install or `uv tool` +uv tool run --from aider-chat pip install boto3 + +# Or with pipx... +pipx inject aider-chat boto3 + +# Or with pip +pip install -U boto3 +``` + # More info For more information on Amazon Bedrock and its models, refer to the [official AWS documentation](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html). diff --git a/aider/website/docs/llms/cohere.md b/aider/website/docs/llms/cohere.md index 66ab3c842..ce3e1a795 100644 --- a/aider/website/docs/llms/cohere.md +++ b/aider/website/docs/llms/cohere.md @@ -10,13 +10,22 @@ Their Command-R+ model works well with aider as a *very basic* coding assistant. You'll need a [Cohere API key](https://dashboard.cohere.com/welcome/login). -To use **Command-R+**: +First, install aider: + +{% include install.md %} + +Then configure your API keys: ``` -python -m pip install -U aider-chat - export COHERE_API_KEY= # Mac/Linux setx COHERE_API_KEY # Windows, restart shell after setx +``` + +Start working with aider and Cohere on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project aider --model command-r-plus-08-2024 diff --git a/aider/website/docs/llms/deepseek.md b/aider/website/docs/llms/deepseek.md index 72073c1df..0abbf51a9 100644 --- a/aider/website/docs/llms/deepseek.md +++ b/aider/website/docs/llms/deepseek.md @@ -9,11 +9,22 @@ Aider can connect to the DeepSeek.com API. To work with DeepSeek's models, you need to set the `DEEPSEEK_API_KEY` environment variable with your [DeepSeek API key](https://platform.deepseek.com/api_keys). The DeepSeek Chat V3 model has a top score on aider's code editing benchmark. -``` -python -m pip install -U aider-chat +First, install aider: +{% include install.md %} + +Then configure your API keys: + +``` export DEEPSEEK_API_KEY= # Mac/Linux setx DEEPSEEK_API_KEY # Windows, restart shell after setx +``` + +Start working with aider and DeepSeek on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project # Use DeepSeek Chat v3 aider --model deepseek/deepseek-chat diff --git a/aider/website/docs/llms/gemini.md b/aider/website/docs/llms/gemini.md index 8cd70d5de..261512fda 100644 --- a/aider/website/docs/llms/gemini.md +++ b/aider/website/docs/llms/gemini.md @@ -7,22 +7,43 @@ nav_order: 300 You'll need a [Gemini API key](https://aistudio.google.com/app/u/2/apikey). -``` -python -m pip install -U aider-chat +First, install aider: -# You may need to install google-generativeai -pip install -U google-generativeai +{% include install.md %} -# Or with pipx... -pipx inject aider-chat google-generativeai +Then configure your API keys: +```bash export GEMINI_API_KEY= # Mac/Linux setx GEMINI_API_KEY # Windows, restart shell after setx +``` -# You can run the Gemini 2.5 Pro model with: -aider --model gemini-2.5-pro +Start working with aider and Gemini on your codebase: + + +```bash +# Change directory into your codebase +cd /to/your/project + +# You can run the Gemini 2.5 Pro model with this shortcut: +aider --model gemini + +# You can run the Gemini 2.5 Pro Exp for free, with usage limits: +aider --model gemini-exp # List models available from Gemini aider --list-models gemini/ ``` +You may need to install the `google-generativeai` package. + +```bash +# If you installed with aider-install or `uv tool` +uv tool run --from aider-chat pip install google-generativeai + +# Or with pipx... +pipx inject aider-chat google-generativeai + +# Or with pip +pip install -U google-generativeai +``` diff --git a/aider/website/docs/llms/github.md b/aider/website/docs/llms/github.md new file mode 100644 index 000000000..43c785344 --- /dev/null +++ b/aider/website/docs/llms/github.md @@ -0,0 +1,111 @@ +--- +parent: Connecting to LLMs +nav_order: 510 +--- + +# GitHub Copilot + +Aider can connect to GitHub Copilot’s LLMs because Copilot exposes a standard **OpenAI-style** +endpoint at: + +``` +https://api.githubcopilot.com +``` + +First, install aider: + +{% include install.md %} + +--- + +## Configure your environment + +```bash +# macOS/Linux +export OPENAI_API_BASE=https://api.githubcopilot.com +export OPENAI_API_KEY= + +# Windows (PowerShell) +setx OPENAI_API_BASE https://api.githubcopilot.com +setx OPENAI_API_KEY +# …restart the shell after setx commands +``` + +--- + +### Where do I get the token? +The easiest path is to sign in to Copilot from any JetBrains IDE (PyCharm, GoLand, etc). +After you authenticate a file appears: + +``` +~/.config/github-copilot/apps.json +``` + +On Windows the config can be found in: + +``` +~\AppData\Local\github-copilot\apps.json +``` + +Copy the `oauth_token` value – that string is your `OPENAI_API_KEY`. + +*Note:* tokens created by the Neovim **copilot.lua** plugin (old `hosts.json`) sometimes lack the +needed scopes. If you see β€œaccess to this endpoint is forbidden”, regenerate the token with a +JetBrains IDE. + +--- + +## Discover available models + +Copilot hosts many models (OpenAI, Anthropic, Google, etc). +List the models your subscription allows with: + +```bash +curl -s https://api.githubcopilot.com/models \ + -H "Authorization: Bearer $OPENAI_API_KEY" \ + -H "Content-Type: application/json" \ + -H "Copilot-Integration-Id: vscode-chat" | jq -r '.data[].id' +``` + +Each returned ID can be used with aider by **prefixing it with `openai/`**: + +```bash +aider --model openai/gpt-4o +# or +aider --model openai/claude-3.7-sonnet-thought +``` + +--- + +## Quick start + +```bash +# change into your project +cd /to/your/project + +# talk to Copilot +aider --model openai/gpt-4o +``` + +--- + +## Optional config file (`~/.aider.conf.yml`) + +```yaml +openai-api-base: https://api.githubcopilot.com +openai-api-key: "" +model: openai/gpt-4o +weak-model: openai/gpt-4o-mini +show-model-warnings: false +``` + +--- + +## FAQ + +* Calls made through aider are billed through your Copilot subscription + (aider will still print *estimated* costs). +* The Copilot docs explicitly allow third-party β€œagents” that hit this API – aider is playing by + the rules. +* Aider talks directly to the REST endpointβ€”no web-UI scraping or browser automation. + diff --git a/aider/website/docs/llms/groq.md b/aider/website/docs/llms/groq.md index f258e6848..b8e60e719 100644 --- a/aider/website/docs/llms/groq.md +++ b/aider/website/docs/llms/groq.md @@ -10,13 +10,22 @@ The Llama 3 70B model works well with aider and is comparable to GPT-3.5 in code editing performance. You'll need a [Groq API key](https://console.groq.com/keys). -To use **Llama3 70B**: +First, install aider: + +{% include install.md %} + +Then configure your API keys: ``` -python -m pip install -U aider-chat - export GROQ_API_KEY= # Mac/Linux setx GROQ_API_KEY # Windows, restart shell after setx +``` + +Start working with aider and Groq on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project aider --model groq/llama3-70b-8192 diff --git a/aider/website/docs/llms/lm-studio.md b/aider/website/docs/llms/lm-studio.md index 909d3afe1..be9e53845 100644 --- a/aider/website/docs/llms/lm-studio.md +++ b/aider/website/docs/llms/lm-studio.md @@ -5,11 +5,15 @@ nav_order: 400 # LM Studio -To use LM Studio: +Aider can connect to models served by LM Studio. + +First, install aider: + +{% include install.md %} + +Then configure your API key and endpoint: ``` -python -m pip install -U aider-chat - # Must set a value here even if its a dummy value export LM_STUDIO_API_KEY=dummy-api-key # Mac/Linux setx LM_STUDIO_API_KEY dummy-api-key # Windows, restart shell after setx @@ -17,12 +21,19 @@ setx LM_STUDIO_API_KEY dummy-api-key # Windows, restart shell after setx # LM Studio default server URL is http://localhost:1234/v1 export LM_STUDIO_API_BASE=http://localhost:1234/v1 # Mac/Linux setx LM_STUDIO_API_BASE http://localhost:1234/v1 # Windows, restart shell after setx - -aider --model lm_studio/ ``` **Note:** Even though LM Studio doesn't require an API Key out of the box the `LM_STUDIO_API_KEY` must have a dummy value like `dummy-api-key` set or the client request will fail trying to send an empty `Bearer` token. +Start working with aider and LM Studio on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project + +aider --model lm_studio/ +``` + See the [model warnings](warnings.html) section for information on warnings which will occur when working with models that aider is not familiar with. diff --git a/aider/website/docs/llms/ollama.md b/aider/website/docs/llms/ollama.md index 463dc4a3e..a9dbf6c07 100644 --- a/aider/website/docs/llms/ollama.md +++ b/aider/website/docs/llms/ollama.md @@ -7,6 +7,19 @@ nav_order: 500 Aider can connect to local Ollama models. +First, install aider: + +{% include install.md %} + +Then configure your Ollama API endpoint (usually the default): + +```bash +export OLLAMA_API_BASE=http://127.0.0.1:11434 # Mac/Linux +setx OLLAMA_API_BASE http://127.0.0.1:11434 # Windows, restart shell after setx +``` + +Start working with aider and Ollama on your codebase: + ``` # Pull the model ollama pull @@ -14,11 +27,8 @@ ollama pull # Start your ollama server, increasing the context window to 8k tokens OLLAMA_CONTEXT_LENGTH=8192 ollama serve -# In another terminal window... -python -m pip install -U aider-chat - -export OLLAMA_API_BASE=http://127.0.0.1:11434 # Mac/Linux -setx OLLAMA_API_BASE http://127.0.0.1:11434 # Windows, restart shell after setx +# In another terminal window, change directory into your codebase +cd /to/your/project aider --model ollama_chat/ ``` diff --git a/aider/website/docs/llms/openai-compat.md b/aider/website/docs/llms/openai-compat.md index e1b2a73f2..ea45a574f 100644 --- a/aider/website/docs/llms/openai-compat.md +++ b/aider/website/docs/llms/openai-compat.md @@ -7,10 +7,13 @@ nav_order: 500 Aider can connect to any LLM which is accessible via an OpenAI compatible API endpoint. -``` -python -m pip install aider-install -aider-install +First, install aider: +{% include install.md %} + +Then configure your API key and endpoint: + +``` # Mac/Linux: export OPENAI_API_BASE= export OPENAI_API_KEY= @@ -19,6 +22,13 @@ export OPENAI_API_KEY= setx OPENAI_API_BASE setx OPENAI_API_KEY # ... restart shell after setx commands +``` + +Start working with aider and your OpenAI compatible API on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project # Prefix the model name with openai/ aider --model openai/ diff --git a/aider/website/docs/llms/openai.md b/aider/website/docs/llms/openai.md index a9d907afb..e88944644 100644 --- a/aider/website/docs/llms/openai.md +++ b/aider/website/docs/llms/openai.md @@ -10,27 +10,34 @@ To work with OpenAI's models, you need to provide your either in the `OPENAI_API_KEY` environment variable or via the `--api-key openai=` command line switch. -Aider has some built in shortcuts for the most popular OpenAI models and -has been tested and benchmarked to work well with them: +First, install aider: + +{% include install.md %} + +Then configure your API keys: ``` -python -m pip install -U aider-chat +export OPENAI_API_KEY= # Mac/Linux +setx OPENAI_API_KEY # Windows, restart shell after setx +``` + +Start working with aider and OpenAI on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project # o3-mini -aider --model o3-mini --api-key openai= +aider --model o3-mini # o1-mini -aider --model o1-mini --api-key openai= +aider --model o1-mini # GPT-4o -aider --model gpt-4o --api-key openai= +aider --model gpt-4o # List models available from OpenAI aider --list-models openai/ - -# You can also store you API key in environment variables (or .env) -export OPENAI_API_KEY= # Mac/Linux -setx OPENAI_API_KEY # Windows, restart shell after setx ``` You can use `aider --model ` to use any other OpenAI model. diff --git a/aider/website/docs/llms/openrouter.md b/aider/website/docs/llms/openrouter.md index f9ec3ea0d..e5e8a48cc 100644 --- a/aider/website/docs/llms/openrouter.md +++ b/aider/website/docs/llms/openrouter.md @@ -8,11 +8,22 @@ nav_order: 500 Aider can connect to [models provided by OpenRouter](https://openrouter.ai/models?o=top-weekly): You'll need an [OpenRouter API key](https://openrouter.ai/keys). -``` -python -m pip install -U aider-chat +First, install aider: +{% include install.md %} + +Then configure your API keys: + +``` export OPENROUTER_API_KEY= # Mac/Linux setx OPENROUTER_API_KEY # Windows, restart shell after setx +``` + +Start working with aider and OpenRouter on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project # Or any other open router model aider --model openrouter// @@ -23,16 +34,6 @@ aider --list-models openrouter/ In particular, many aider users access Sonnet via OpenRouter: -``` -python -m pip install -U aider-chat - -export OPENROUTER_API_KEY= # Mac/Linux -setx OPENROUTER_API_KEY # Windows, restart shell after setx - -aider --model openrouter/anthropic/claude-3.7-sonnet -``` - - {: .tip } If you get errors, check your [OpenRouter privacy settings](https://openrouter.ai/settings/privacy). diff --git a/aider/website/docs/llms/other.md b/aider/website/docs/llms/other.md index c77c8ff54..a2335a9c7 100644 --- a/aider/website/docs/llms/other.md +++ b/aider/website/docs/llms/other.md @@ -55,46 +55,61 @@ lines = run( lines = ['- ' + line for line in lines.splitlines(keepends=True)] cog.out(''.join(lines)) ]]]--> -- ALEPHALPHA_API_KEY - ALEPH_ALPHA_API_KEY +- ALEPHALPHA_API_KEY - ANTHROPIC_API_KEY - ANYSCALE_API_KEY +- ARK_API_KEY - AZURE_AI_API_KEY - AZURE_API_KEY - AZURE_OPENAI_API_KEY - BASETEN_API_KEY +- BYTEZ_API_KEY - CEREBRAS_API_KEY - CLARIFAI_API_KEY - CLOUDFLARE_API_KEY +- CO_API_KEY - CODESTRAL_API_KEY - COHERE_API_KEY -- CO_API_KEY +- COMPACTIFAI_API_KEY +- DASHSCOPE_API_KEY - DATABRICKS_API_KEY - DEEPINFRA_API_KEY - DEEPSEEK_API_KEY -- FIREWORKSAI_API_KEY +- FEATHERLESS_AI_API_KEY - FIREWORKS_AI_API_KEY - FIREWORKS_API_KEY +- FIREWORKSAI_API_KEY - GEMINI_API_KEY +- GOOGLE_API_KEY - GROQ_API_KEY - HUGGINGFACE_API_KEY +- INFINITY_API_KEY - MARITALK_API_KEY - MISTRAL_API_KEY +- MOONSHOT_API_KEY +- NEBIUS_API_KEY - NLP_CLOUD_API_KEY +- NOVITA_API_KEY - NVIDIA_NIM_API_KEY - OLLAMA_API_KEY - OPENAI_API_KEY - OPENAI_LIKE_API_KEY - OPENROUTER_API_KEY - OR_API_KEY +- OVHCLOUD_API_KEY - PALM_API_KEY - PERPLEXITYAI_API_KEY - PREDIBASE_API_KEY - PROVIDER_API_KEY - REPLICATE_API_KEY +- SAMBANOVA_API_KEY - TOGETHERAI_API_KEY +- USER_API_KEY +- VERCEL_AI_GATEWAY_API_KEY - VOLCENGINE_API_KEY - VOYAGE_API_KEY +- WANDB_API_KEY - WATSONX_API_KEY - WX_API_KEY - XAI_API_KEY diff --git a/aider/website/docs/llms/vertex.md b/aider/website/docs/llms/vertex.md index b7afee42f..5d6bd20f2 100644 --- a/aider/website/docs/llms/vertex.md +++ b/aider/website/docs/llms/vertex.md @@ -13,6 +13,10 @@ or service account with permission to use the Vertex AI API. With your chosen login method, the gcloud CLI should automatically set the `GOOGLE_APPLICATION_CREDENTIALS` environment variable which points to the credentials file. +First, install aider: + +{% include install.md %} + To configure Aider to use the Vertex AI API, you need to set `VERTEXAI_PROJECT` (the GCP project ID) and `VERTEXAI_LOCATION` (the GCP region) [environment variables for Aider](/docs/config/dotenv.html). @@ -27,13 +31,16 @@ VERTEXAI_PROJECT=my-project VERTEXAI_LOCATION=us-east5 ``` -Then you can run aider with the `--model` command line switch, like this: +Start working with aider and Vertex AI on your codebase: ``` +# Change directory into your codebase +cd /to/your/project + aider --model vertex_ai/claude-3-5-sonnet@20240620 ``` -Or you can use the [yaml config](/docs/config/aider_conf.html) to set the model to any of the +Or you can use the [YAML config](/docs/config/aider_conf.html) to set the model to any of the models supported by Vertex AI. Example `.aider.conf.yml` file: diff --git a/aider/website/docs/llms/xai.md b/aider/website/docs/llms/xai.md index 3374cf487..c2334fa3c 100644 --- a/aider/website/docs/llms/xai.md +++ b/aider/website/docs/llms/xai.md @@ -7,14 +7,22 @@ nav_order: 400 You'll need a [xAI API key](https://console.x.ai.). -To use xAI: +First, install aider: + +{% include install.md %} + +Then configure your API keys: ```bash -python -m pip install aider-install -aider-install - export XAI_API_KEY= # Mac/Linux setx XAI_API_KEY # Windows, restart shell after setx +``` + +Start working with aider and xAI on your codebase: + +```bash +# Change directory into your codebase +cd /to/your/project # Grok 3 aider --model xai/grok-3-beta diff --git a/aider/website/docs/more/analytics.md b/aider/website/docs/more/analytics.md index 24bd4910b..74de05213 100644 --- a/aider/website/docs/more/analytics.md +++ b/aider/website/docs/more/analytics.md @@ -52,10 +52,9 @@ will confirm you wish to opt-in to analytics. - `--no-analytics` will turn off analytics for the current session. - By default, if you don't provide `--analytics` or `--no-analytics`, aider will enable analytics for a random subset of users. +Such randomly selected users will be asked if they wish to opt-in to analytics. This will never happen if you have permanently disabled analytics with `--analytics-disable`. -Randomly selected users will be asked if they wish to opt-in to analytics. - ## Opting in @@ -106,6 +105,12 @@ If you want to just log analytics without reporting them, you can do: aider --analytics-log filename.jsonl --no-analytics ``` +### Sending analytics to custom PostHog project or installation + +Aider uses PostHog for analytics collection. You can configure aider to send analytics to your own PostHog project or a custom PostHog installation using these parameters: + +- `--analytics-posthog-project-api-key KEY` - Set a custom PostHog project API key +- `--analytics-posthog-host HOST` - Set a custom PostHog host (default is app.posthog.com) ## Reporting issues diff --git a/aider/website/docs/more/infinite-output.md b/aider/website/docs/more/infinite-output.md index be61226d6..069be5da6 100644 --- a/aider/website/docs/more/infinite-output.md +++ b/aider/website/docs/more/infinite-output.md @@ -57,7 +57,30 @@ cog.out(model_list) ]]]--> - anthropic.claude-3-5-haiku-20241022-v1:0 - anthropic.claude-3-5-sonnet-20241022-v2:0 +- anthropic.claude-3-7-sonnet-20240620-v1:0 - anthropic.claude-3-7-sonnet-20250219-v1:0 +- anthropic.claude-haiku-4-5-20251001-v1:0 +- anthropic.claude-haiku-4-5@20251001 +- anthropic.claude-opus-4-1-20250805-v1:0 +- anthropic.claude-opus-4-20250514-v1:0 +- anthropic.claude-opus-4-5-20251101-v1:0 +- anthropic.claude-sonnet-4-20250514-v1:0 +- anthropic.claude-sonnet-4-5-20250929-v1:0 +- apac.anthropic.claude-3-5-sonnet-20241022-v2:0 +- apac.anthropic.claude-haiku-4-5-20251001-v1:0 +- apac.anthropic.claude-sonnet-4-20250514-v1:0 +- au.anthropic.claude-haiku-4-5-20251001-v1:0 +- au.anthropic.claude-sonnet-4-5-20250929-v1:0 +- azure_ai/claude-haiku-4-5 +- azure_ai/claude-opus-4-1 +- azure_ai/claude-sonnet-4-5 +- azure_ai/deepseek-v3.2 +- azure_ai/deepseek-v3.2-speciale +- azure_ai/mistral-medium-2505 +- bedrock/us-gov-east-1/claude-sonnet-4-5-20250929-v1:0 +- bedrock/us-gov-west-1/anthropic.claude-3-7-sonnet-20250219-v1:0 +- bedrock/us-gov-west-1/claude-sonnet-4-5-20250929-v1:0 +- bedrock/us.anthropic.claude-3-5-haiku-20241022-v1:0 - claude-3-5-haiku-20241022 - claude-3-5-haiku-latest - claude-3-5-sonnet-20240620 @@ -68,24 +91,72 @@ cog.out(model_list) - claude-3-haiku-20240307 - claude-3-opus-20240229 - claude-3-opus-latest -- claude-3-sonnet-20240229 +- claude-4-opus-20250514 +- claude-4-sonnet-20250514 +- claude-haiku-4-5 +- claude-haiku-4-5-20251001 +- claude-opus-4-1 +- claude-opus-4-1-20250805 +- claude-opus-4-20250514 +- claude-opus-4-5 +- claude-opus-4-5-20251101 +- claude-sonnet-4-20250514 +- claude-sonnet-4-5 +- claude-sonnet-4-5-20250929 +- claude-sonnet-4-5-20250929-v1:0 - codestral/codestral-2405 - codestral/codestral-latest - databricks/databricks-claude-3-7-sonnet +- databricks/databricks-claude-haiku-4-5 +- databricks/databricks-claude-opus-4 +- databricks/databricks-claude-opus-4-1 +- databricks/databricks-claude-opus-4-5 +- databricks/databricks-claude-sonnet-4 +- databricks/databricks-claude-sonnet-4-1 +- databricks/databricks-claude-sonnet-4-5 - deepseek/deepseek-chat - deepseek/deepseek-coder +- deepseek/deepseek-r1 - deepseek/deepseek-reasoner +- deepseek/deepseek-v3 +- deepseek/deepseek-v3.2 - eu.anthropic.claude-3-5-haiku-20241022-v1:0 - eu.anthropic.claude-3-5-sonnet-20241022-v2:0 +- eu.anthropic.claude-3-7-sonnet-20250219-v1:0 +- eu.anthropic.claude-haiku-4-5-20251001-v1:0 +- eu.anthropic.claude-opus-4-1-20250805-v1:0 +- eu.anthropic.claude-opus-4-20250514-v1:0 +- eu.anthropic.claude-opus-4-5-20251101-v1:0 +- eu.anthropic.claude-sonnet-4-20250514-v1:0 +- eu.anthropic.claude-sonnet-4-5-20250929-v1:0 +- global.anthropic.claude-haiku-4-5-20251001-v1:0 +- global.anthropic.claude-opus-4-5-20251101-v1:0 +- global.anthropic.claude-sonnet-4-20250514-v1:0 +- global.anthropic.claude-sonnet-4-5-20250929-v1:0 +- jp.anthropic.claude-haiku-4-5-20251001-v1:0 +- jp.anthropic.claude-sonnet-4-5-20250929-v1:0 - mistral/codestral-2405 +- mistral/codestral-2508 - mistral/codestral-latest - mistral/codestral-mamba-latest +- mistral/devstral-2512 +- mistral/devstral-medium-2507 +- mistral/devstral-small-2505 +- mistral/devstral-small-2507 +- mistral/labs-devstral-small-2512 +- mistral/magistral-medium-2506 +- mistral/magistral-medium-2509 +- mistral/magistral-medium-latest +- mistral/magistral-small-2506 +- mistral/magistral-small-latest - mistral/mistral-large-2402 - mistral/mistral-large-2407 - mistral/mistral-large-2411 +- mistral/mistral-large-3 - mistral/mistral-large-latest - mistral/mistral-medium - mistral/mistral-medium-2312 +- mistral/mistral-medium-2505 - mistral/mistral-medium-latest - mistral/mistral-small - mistral/mistral-small-latest @@ -101,10 +172,26 @@ cog.out(model_list) - mistral/pixtral-large-latest - openrouter/anthropic/claude-3.5-sonnet - openrouter/anthropic/claude-3.7-sonnet +- openrouter/anthropic/claude-haiku-4.5 +- openrouter/anthropic/claude-opus-4 +- openrouter/anthropic/claude-opus-4.1 +- openrouter/anthropic/claude-opus-4.5 +- openrouter/anthropic/claude-sonnet-4 +- openrouter/anthropic/claude-sonnet-4.5 +- openrouter/deepseek/deepseek-chat-v3.1 - openrouter/deepseek/deepseek-r1 +- openrouter/deepseek/deepseek-r1-0528 +- openrouter/deepseek/deepseek-v3.2 +- openrouter/deepseek/deepseek-v3.2-exp - us.anthropic.claude-3-5-haiku-20241022-v1:0 - us.anthropic.claude-3-5-sonnet-20241022-v2:0 - us.anthropic.claude-3-7-sonnet-20250219-v1:0 +- us.anthropic.claude-haiku-4-5-20251001-v1:0 +- us.anthropic.claude-opus-4-1-20250805-v1:0 +- us.anthropic.claude-opus-4-20250514-v1:0 +- us.anthropic.claude-opus-4-5-20251101-v1:0 +- us.anthropic.claude-sonnet-4-20250514-v1:0 +- us.anthropic.claude-sonnet-4-5-20250929-v1:0 - vertex_ai/claude-3-5-haiku - vertex_ai/claude-3-5-haiku@20241022 - vertex_ai/claude-3-5-sonnet @@ -118,6 +205,20 @@ cog.out(model_list) - vertex_ai/claude-3-opus@20240229 - vertex_ai/claude-3-sonnet - vertex_ai/claude-3-sonnet@20240229 +- vertex_ai/claude-haiku-4-5@20251001 +- vertex_ai/claude-opus-4 +- vertex_ai/claude-opus-4-1 +- vertex_ai/claude-opus-4-1@20250805 +- vertex_ai/claude-opus-4-5 +- vertex_ai/claude-opus-4-5@20251101 +- vertex_ai/claude-opus-4@20250514 +- vertex_ai/claude-sonnet-4 +- vertex_ai/claude-sonnet-4-5 +- vertex_ai/claude-sonnet-4-5@20250929 +- vertex_ai/claude-sonnet-4@20250514 +- vertex_ai/deepseek-ai/deepseek-r1-0528-maas +- vertex_ai/deepseek-ai/deepseek-v3.1-maas +- vertex_ai/deepseek-ai/deepseek-v3.2-maas diff --git a/aider/website/docs/scripting.md b/aider/website/docs/scripting.md index 32d060f25..71bb3282a 100644 --- a/aider/website/docs/scripting.md +++ b/aider/website/docs/scripting.md @@ -88,7 +88,7 @@ for all the supported arguments. It can also be helpful to set the equivalent of `--yes` by doing this: -``` +```python from aider.io import InputOutput io = InputOutput(yes=True) # ... diff --git a/aider/website/docs/troubleshooting/models-and-keys.md b/aider/website/docs/troubleshooting/models-and-keys.md index 06fbc9722..7b80ec3e4 100644 --- a/aider/website/docs/troubleshooting/models-and-keys.md +++ b/aider/website/docs/troubleshooting/models-and-keys.md @@ -17,6 +17,8 @@ First, aider will check which [keys you have provided via the environment, config files, or command line arguments](https://aider.chat/docs/config/api-keys.html). Based on the available keys, aider will select the best model to use. +## OpenRouter + If you have not provided any keys, aider will offer to help you connect to [OpenRouter](http://openrouter.ai) which provides both free and paid access to most popular LLMs. diff --git a/aider/website/docs/usage/commands.md b/aider/website/docs/usage/commands.md index 9a0caca19..d8bbaed0f 100644 --- a/aider/website/docs/usage/commands.md +++ b/aider/website/docs/usage/commands.md @@ -57,7 +57,7 @@ cog.out(get_help_md()) | **/save** | Save commands to a file that can reconstruct the current chat session's files | | **/settings** | Print out the current settings | | **/test** | Run a shell command and add the output to the chat on non-zero exit code | -| **/think-tokens** | Set the thinking token budget (supports formats like 8096, 8k, 10.5k, 0.5M) | +| **/think-tokens** | Set the thinking token budget, eg: 8096, 8k, 10.5k, 0.5M, or 0 to disable. | | **/tokens** | Report on the number of tokens used by the current chat context | | **/undo** | Undo the last git commit if it was done by aider | | **/voice** | Record and transcribe voice input | diff --git a/aider/website/docs/usage/lint-test.md b/aider/website/docs/usage/lint-test.md index 0dfdccbae..c44398788 100644 --- a/aider/website/docs/usage/lint-test.md +++ b/aider/website/docs/usage/lint-test.md @@ -52,8 +52,8 @@ the script as your linter. # Second attempt will not do anything and exit 0 unless there's a real problem beyond # the code formatting that was completed. -pre-commit run --files $* >/dev/null \ - || pre-commit run --files $* +pre-commit run --files "$@" >/dev/null \ + || pre-commit run --files "$@" ``` ## Testing diff --git a/aider/website/index.html b/aider/website/index.html index 80611f3a9..fd8b6b4c5 100644 --- a/aider/website/index.html +++ b/aider/website/index.html @@ -27,7 +27,7 @@ layout: none Features Getting Started Documentation - Discord + Discord GitHub @@ -69,11 +69,11 @@ cog.out(text) ]]]--> ⭐ GitHub Stars - 32K + 39K πŸ“¦ Installs - 2.0M + 4.1M
πŸ“ˆ Tokens/week @@ -85,7 +85,7 @@ cog.out(text) πŸ”„ Singularity - 92% + 88%
@@ -269,173 +269,183 @@ cog.out(text)