cecli-dev 0.95.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cecli/__init__.py +20 -0
- cecli/__main__.py +4 -0
- cecli/_version.py +34 -0
- cecli/args.py +1092 -0
- cecli/args_formatter.py +228 -0
- cecli/change_tracker.py +133 -0
- cecli/coders/__init__.py +38 -0
- cecli/coders/agent_coder.py +1872 -0
- cecli/coders/architect_coder.py +63 -0
- cecli/coders/ask_coder.py +8 -0
- cecli/coders/base_coder.py +3993 -0
- cecli/coders/chat_chunks.py +116 -0
- cecli/coders/context_coder.py +52 -0
- cecli/coders/copypaste_coder.py +269 -0
- cecli/coders/editblock_coder.py +656 -0
- cecli/coders/editblock_fenced_coder.py +9 -0
- cecli/coders/editblock_func_coder.py +140 -0
- cecli/coders/editor_diff_fenced_coder.py +8 -0
- cecli/coders/editor_editblock_coder.py +8 -0
- cecli/coders/editor_whole_coder.py +8 -0
- cecli/coders/help_coder.py +15 -0
- cecli/coders/patch_coder.py +705 -0
- cecli/coders/search_replace.py +757 -0
- cecli/coders/shell.py +37 -0
- cecli/coders/single_wholefile_func_coder.py +101 -0
- cecli/coders/udiff_coder.py +428 -0
- cecli/coders/udiff_simple.py +12 -0
- cecli/coders/wholefile_coder.py +143 -0
- cecli/coders/wholefile_func_coder.py +133 -0
- cecli/commands/__init__.py +192 -0
- cecli/commands/add.py +226 -0
- cecli/commands/agent.py +51 -0
- cecli/commands/architect.py +46 -0
- cecli/commands/ask.py +44 -0
- cecli/commands/chat_mode.py +0 -0
- cecli/commands/clear.py +37 -0
- cecli/commands/code.py +46 -0
- cecli/commands/command_prefix.py +44 -0
- cecli/commands/commit.py +52 -0
- cecli/commands/context.py +47 -0
- cecli/commands/context_blocks.py +124 -0
- cecli/commands/context_management.py +51 -0
- cecli/commands/copy.py +62 -0
- cecli/commands/copy_context.py +81 -0
- cecli/commands/core.py +287 -0
- cecli/commands/diff.py +68 -0
- cecli/commands/drop.py +217 -0
- cecli/commands/editor.py +78 -0
- cecli/commands/exit.py +55 -0
- cecli/commands/git.py +57 -0
- cecli/commands/help.py +140 -0
- cecli/commands/history_search.py +40 -0
- cecli/commands/lint.py +109 -0
- cecli/commands/list_sessions.py +56 -0
- cecli/commands/load.py +85 -0
- cecli/commands/load_session.py +48 -0
- cecli/commands/load_skill.py +68 -0
- cecli/commands/ls.py +75 -0
- cecli/commands/map.py +37 -0
- cecli/commands/map_refresh.py +35 -0
- cecli/commands/model.py +118 -0
- cecli/commands/models.py +41 -0
- cecli/commands/multiline_mode.py +38 -0
- cecli/commands/paste.py +91 -0
- cecli/commands/quit.py +32 -0
- cecli/commands/read_only.py +267 -0
- cecli/commands/read_only_stub.py +270 -0
- cecli/commands/reasoning_effort.py +70 -0
- cecli/commands/remove_skill.py +68 -0
- cecli/commands/report.py +40 -0
- cecli/commands/reset.py +88 -0
- cecli/commands/run.py +99 -0
- cecli/commands/save.py +49 -0
- cecli/commands/save_session.py +43 -0
- cecli/commands/settings.py +69 -0
- cecli/commands/test.py +58 -0
- cecli/commands/think_tokens.py +74 -0
- cecli/commands/tokens.py +207 -0
- cecli/commands/undo.py +145 -0
- cecli/commands/utils/__init__.py +0 -0
- cecli/commands/utils/base_command.py +131 -0
- cecli/commands/utils/helpers.py +142 -0
- cecli/commands/utils/registry.py +53 -0
- cecli/commands/utils/save_load_manager.py +98 -0
- cecli/commands/voice.py +78 -0
- cecli/commands/weak_model.py +123 -0
- cecli/commands/web.py +87 -0
- cecli/deprecated_args.py +185 -0
- cecli/diffs.py +129 -0
- cecli/dump.py +29 -0
- cecli/editor.py +147 -0
- cecli/exceptions.py +115 -0
- cecli/format_settings.py +26 -0
- cecli/help.py +119 -0
- cecli/help_pats.py +19 -0
- cecli/helpers/__init__.py +9 -0
- cecli/helpers/copypaste.py +123 -0
- cecli/helpers/coroutines.py +8 -0
- cecli/helpers/file_searcher.py +142 -0
- cecli/helpers/model_providers.py +552 -0
- cecli/helpers/plugin_manager.py +81 -0
- cecli/helpers/profiler.py +162 -0
- cecli/helpers/requests.py +77 -0
- cecli/helpers/similarity.py +98 -0
- cecli/helpers/skills.py +577 -0
- cecli/history.py +186 -0
- cecli/io.py +1782 -0
- cecli/linter.py +304 -0
- cecli/llm.py +101 -0
- cecli/main.py +1280 -0
- cecli/mcp/__init__.py +154 -0
- cecli/mcp/oauth.py +250 -0
- cecli/mcp/server.py +278 -0
- cecli/mdstream.py +243 -0
- cecli/models.py +1255 -0
- cecli/onboarding.py +301 -0
- cecli/prompts/__init__.py +0 -0
- cecli/prompts/agent.yml +71 -0
- cecli/prompts/architect.yml +35 -0
- cecli/prompts/ask.yml +31 -0
- cecli/prompts/base.yml +99 -0
- cecli/prompts/context.yml +60 -0
- cecli/prompts/copypaste.yml +5 -0
- cecli/prompts/editblock.yml +143 -0
- cecli/prompts/editblock_fenced.yml +106 -0
- cecli/prompts/editblock_func.yml +25 -0
- cecli/prompts/editor_diff_fenced.yml +115 -0
- cecli/prompts/editor_editblock.yml +121 -0
- cecli/prompts/editor_whole.yml +46 -0
- cecli/prompts/help.yml +37 -0
- cecli/prompts/patch.yml +110 -0
- cecli/prompts/single_wholefile_func.yml +24 -0
- cecli/prompts/udiff.yml +106 -0
- cecli/prompts/udiff_simple.yml +13 -0
- cecli/prompts/utils/__init__.py +0 -0
- cecli/prompts/utils/prompt_registry.py +167 -0
- cecli/prompts/utils/system.py +56 -0
- cecli/prompts/wholefile.yml +50 -0
- cecli/prompts/wholefile_func.yml +24 -0
- cecli/queries/tree-sitter-language-pack/README.md +7 -0
- cecli/queries/tree-sitter-language-pack/arduino-tags.scm +5 -0
- cecli/queries/tree-sitter-language-pack/c-tags.scm +12 -0
- cecli/queries/tree-sitter-language-pack/chatito-tags.scm +16 -0
- cecli/queries/tree-sitter-language-pack/clojure-tags.scm +12 -0
- cecli/queries/tree-sitter-language-pack/commonlisp-tags.scm +127 -0
- cecli/queries/tree-sitter-language-pack/cpp-tags.scm +18 -0
- cecli/queries/tree-sitter-language-pack/csharp-tags.scm +32 -0
- cecli/queries/tree-sitter-language-pack/d-tags.scm +26 -0
- cecli/queries/tree-sitter-language-pack/dart-tags.scm +97 -0
- cecli/queries/tree-sitter-language-pack/elisp-tags.scm +5 -0
- cecli/queries/tree-sitter-language-pack/elixir-tags.scm +59 -0
- cecli/queries/tree-sitter-language-pack/elm-tags.scm +22 -0
- cecli/queries/tree-sitter-language-pack/gleam-tags.scm +41 -0
- cecli/queries/tree-sitter-language-pack/go-tags.scm +49 -0
- cecli/queries/tree-sitter-language-pack/java-tags.scm +26 -0
- cecli/queries/tree-sitter-language-pack/javascript-tags.scm +96 -0
- cecli/queries/tree-sitter-language-pack/lua-tags.scm +39 -0
- cecli/queries/tree-sitter-language-pack/matlab-tags.scm +10 -0
- cecli/queries/tree-sitter-language-pack/ocaml-tags.scm +115 -0
- cecli/queries/tree-sitter-language-pack/ocaml_interface-tags.scm +101 -0
- cecli/queries/tree-sitter-language-pack/pony-tags.scm +39 -0
- cecli/queries/tree-sitter-language-pack/properties-tags.scm +5 -0
- cecli/queries/tree-sitter-language-pack/python-tags.scm +24 -0
- cecli/queries/tree-sitter-language-pack/r-tags.scm +27 -0
- cecli/queries/tree-sitter-language-pack/racket-tags.scm +12 -0
- cecli/queries/tree-sitter-language-pack/ruby-tags.scm +69 -0
- cecli/queries/tree-sitter-language-pack/rust-tags.scm +63 -0
- cecli/queries/tree-sitter-language-pack/solidity-tags.scm +43 -0
- cecli/queries/tree-sitter-language-pack/swift-tags.scm +54 -0
- cecli/queries/tree-sitter-language-pack/udev-tags.scm +20 -0
- cecli/queries/tree-sitter-languages/README.md +24 -0
- cecli/queries/tree-sitter-languages/c-tags.scm +12 -0
- cecli/queries/tree-sitter-languages/c_sharp-tags.scm +52 -0
- cecli/queries/tree-sitter-languages/cpp-tags.scm +18 -0
- cecli/queries/tree-sitter-languages/dart-tags.scm +92 -0
- cecli/queries/tree-sitter-languages/elisp-tags.scm +8 -0
- cecli/queries/tree-sitter-languages/elixir-tags.scm +59 -0
- cecli/queries/tree-sitter-languages/elm-tags.scm +22 -0
- cecli/queries/tree-sitter-languages/fortran-tags.scm +18 -0
- cecli/queries/tree-sitter-languages/go-tags.scm +36 -0
- cecli/queries/tree-sitter-languages/haskell-tags.scm +5 -0
- cecli/queries/tree-sitter-languages/hcl-tags.scm +77 -0
- cecli/queries/tree-sitter-languages/java-tags.scm +26 -0
- cecli/queries/tree-sitter-languages/javascript-tags.scm +96 -0
- cecli/queries/tree-sitter-languages/julia-tags.scm +60 -0
- cecli/queries/tree-sitter-languages/kotlin-tags.scm +30 -0
- cecli/queries/tree-sitter-languages/matlab-tags.scm +10 -0
- cecli/queries/tree-sitter-languages/ocaml-tags.scm +115 -0
- cecli/queries/tree-sitter-languages/ocaml_interface-tags.scm +104 -0
- cecli/queries/tree-sitter-languages/php-tags.scm +32 -0
- cecli/queries/tree-sitter-languages/python-tags.scm +22 -0
- cecli/queries/tree-sitter-languages/ql-tags.scm +26 -0
- cecli/queries/tree-sitter-languages/ruby-tags.scm +69 -0
- cecli/queries/tree-sitter-languages/rust-tags.scm +63 -0
- cecli/queries/tree-sitter-languages/scala-tags.scm +64 -0
- cecli/queries/tree-sitter-languages/typescript-tags.scm +44 -0
- cecli/queries/tree-sitter-languages/zig-tags.scm +20 -0
- cecli/reasoning_tags.py +82 -0
- cecli/repo.py +626 -0
- cecli/repomap.py +1368 -0
- cecli/report.py +260 -0
- cecli/resources/__init__.py +3 -0
- cecli/resources/model-metadata.json +25751 -0
- cecli/resources/model-settings.yml +2394 -0
- cecli/resources/providers.json +67 -0
- cecli/run_cmd.py +143 -0
- cecli/scrape.py +295 -0
- cecli/sendchat.py +250 -0
- cecli/sessions.py +281 -0
- cecli/special.py +203 -0
- cecli/tools/__init__.py +72 -0
- cecli/tools/command.py +103 -0
- cecli/tools/command_interactive.py +113 -0
- cecli/tools/context_manager.py +175 -0
- cecli/tools/delete_block.py +154 -0
- cecli/tools/delete_line.py +120 -0
- cecli/tools/delete_lines.py +144 -0
- cecli/tools/extract_lines.py +281 -0
- cecli/tools/finished.py +35 -0
- cecli/tools/git_branch.py +132 -0
- cecli/tools/git_diff.py +49 -0
- cecli/tools/git_log.py +43 -0
- cecli/tools/git_remote.py +39 -0
- cecli/tools/git_show.py +37 -0
- cecli/tools/git_status.py +32 -0
- cecli/tools/grep.py +242 -0
- cecli/tools/indent_lines.py +195 -0
- cecli/tools/insert_block.py +263 -0
- cecli/tools/list_changes.py +71 -0
- cecli/tools/load_skill.py +51 -0
- cecli/tools/ls.py +77 -0
- cecli/tools/remove_skill.py +51 -0
- cecli/tools/replace_all.py +113 -0
- cecli/tools/replace_line.py +135 -0
- cecli/tools/replace_lines.py +180 -0
- cecli/tools/replace_text.py +186 -0
- cecli/tools/show_numbered_context.py +137 -0
- cecli/tools/thinking.py +52 -0
- cecli/tools/undo_change.py +82 -0
- cecli/tools/update_todo_list.py +148 -0
- cecli/tools/utils/base_tool.py +64 -0
- cecli/tools/utils/helpers.py +359 -0
- cecli/tools/utils/output.py +119 -0
- cecli/tools/utils/registry.py +145 -0
- cecli/tools/view_files_matching.py +138 -0
- cecli/tools/view_files_with_symbol.py +117 -0
- cecli/tui/__init__.py +83 -0
- cecli/tui/app.py +971 -0
- cecli/tui/io.py +566 -0
- cecli/tui/styles.tcss +117 -0
- cecli/tui/widgets/__init__.py +19 -0
- cecli/tui/widgets/completion_bar.py +331 -0
- cecli/tui/widgets/file_list.py +76 -0
- cecli/tui/widgets/footer.py +165 -0
- cecli/tui/widgets/input_area.py +320 -0
- cecli/tui/widgets/key_hints.py +16 -0
- cecli/tui/widgets/output.py +354 -0
- cecli/tui/widgets/status_bar.py +279 -0
- cecli/tui/worker.py +160 -0
- cecli/urls.py +16 -0
- cecli/utils.py +499 -0
- cecli/versioncheck.py +90 -0
- cecli/voice.py +90 -0
- cecli/waiting.py +38 -0
- cecli/watch.py +316 -0
- cecli/watch_prompts.py +12 -0
- cecli/website/Gemfile +8 -0
- cecli/website/_includes/blame.md +162 -0
- cecli/website/_includes/get-started.md +22 -0
- cecli/website/_includes/help-tip.md +5 -0
- cecli/website/_includes/help.md +24 -0
- cecli/website/_includes/install.md +5 -0
- cecli/website/_includes/keys.md +4 -0
- cecli/website/_includes/model-warnings.md +67 -0
- cecli/website/_includes/multi-line.md +22 -0
- cecli/website/_includes/python-m-aider.md +5 -0
- cecli/website/_includes/recording.css +228 -0
- cecli/website/_includes/recording.md +34 -0
- cecli/website/_includes/replit-pipx.md +9 -0
- cecli/website/_includes/works-best.md +1 -0
- cecli/website/_sass/custom/custom.scss +103 -0
- cecli/website/docs/config/adv-model-settings.md +2498 -0
- cecli/website/docs/config/agent-mode.md +320 -0
- cecli/website/docs/config/aider_conf.md +548 -0
- cecli/website/docs/config/api-keys.md +90 -0
- cecli/website/docs/config/custom-commands.md +187 -0
- cecli/website/docs/config/dotenv.md +493 -0
- cecli/website/docs/config/editor.md +127 -0
- cecli/website/docs/config/mcp.md +210 -0
- cecli/website/docs/config/model-aliases.md +173 -0
- cecli/website/docs/config/options.md +890 -0
- cecli/website/docs/config/reasoning.md +210 -0
- cecli/website/docs/config/skills.md +172 -0
- cecli/website/docs/config/tui.md +126 -0
- cecli/website/docs/config.md +44 -0
- cecli/website/docs/faq.md +379 -0
- cecli/website/docs/git.md +76 -0
- cecli/website/docs/index.md +47 -0
- cecli/website/docs/install/codespaces.md +39 -0
- cecli/website/docs/install/docker.md +48 -0
- cecli/website/docs/install/optional.md +100 -0
- cecli/website/docs/install/replit.md +8 -0
- cecli/website/docs/install.md +115 -0
- cecli/website/docs/languages.md +264 -0
- cecli/website/docs/legal/contributor-agreement.md +111 -0
- cecli/website/docs/legal/privacy.md +104 -0
- cecli/website/docs/llms/anthropic.md +77 -0
- cecli/website/docs/llms/azure.md +48 -0
- cecli/website/docs/llms/bedrock.md +132 -0
- cecli/website/docs/llms/cohere.md +34 -0
- cecli/website/docs/llms/deepseek.md +32 -0
- cecli/website/docs/llms/gemini.md +49 -0
- cecli/website/docs/llms/github.md +111 -0
- cecli/website/docs/llms/groq.md +36 -0
- cecli/website/docs/llms/lm-studio.md +39 -0
- cecli/website/docs/llms/ollama.md +75 -0
- cecli/website/docs/llms/openai-compat.md +39 -0
- cecli/website/docs/llms/openai.md +58 -0
- cecli/website/docs/llms/openrouter.md +78 -0
- cecli/website/docs/llms/other.md +117 -0
- cecli/website/docs/llms/vertex.md +50 -0
- cecli/website/docs/llms/warnings.md +10 -0
- cecli/website/docs/llms/xai.md +53 -0
- cecli/website/docs/llms.md +54 -0
- cecli/website/docs/more/analytics.md +127 -0
- cecli/website/docs/more/edit-formats.md +116 -0
- cecli/website/docs/more/infinite-output.md +192 -0
- cecli/website/docs/more-info.md +8 -0
- cecli/website/docs/recordings/auto-accept-architect.md +31 -0
- cecli/website/docs/recordings/dont-drop-original-read-files.md +35 -0
- cecli/website/docs/recordings/index.md +21 -0
- cecli/website/docs/recordings/model-accepts-settings.md +69 -0
- cecli/website/docs/recordings/tree-sitter-language-pack.md +80 -0
- cecli/website/docs/repomap.md +112 -0
- cecli/website/docs/scripting.md +100 -0
- cecli/website/docs/sessions.md +213 -0
- cecli/website/docs/troubleshooting/aider-not-found.md +24 -0
- cecli/website/docs/troubleshooting/edit-errors.md +76 -0
- cecli/website/docs/troubleshooting/imports.md +62 -0
- cecli/website/docs/troubleshooting/models-and-keys.md +54 -0
- cecli/website/docs/troubleshooting/support.md +79 -0
- cecli/website/docs/troubleshooting/token-limits.md +96 -0
- cecli/website/docs/troubleshooting/warnings.md +12 -0
- cecli/website/docs/troubleshooting.md +11 -0
- cecli/website/docs/usage/browser.md +57 -0
- cecli/website/docs/usage/caching.md +49 -0
- cecli/website/docs/usage/commands.md +133 -0
- cecli/website/docs/usage/conventions.md +119 -0
- cecli/website/docs/usage/copypaste.md +136 -0
- cecli/website/docs/usage/images-urls.md +48 -0
- cecli/website/docs/usage/lint-test.md +118 -0
- cecli/website/docs/usage/modes.md +211 -0
- cecli/website/docs/usage/not-code.md +179 -0
- cecli/website/docs/usage/notifications.md +87 -0
- cecli/website/docs/usage/tips.md +79 -0
- cecli/website/docs/usage/tutorials.md +30 -0
- cecli/website/docs/usage/voice.md +121 -0
- cecli/website/docs/usage/watch.md +294 -0
- cecli/website/docs/usage.md +102 -0
- cecli/website/share/index.md +101 -0
- cecli_dev-0.95.5.dist-info/METADATA +549 -0
- cecli_dev-0.95.5.dist-info/RECORD +366 -0
- cecli_dev-0.95.5.dist-info/WHEEL +5 -0
- cecli_dev-0.95.5.dist-info/entry_points.txt +4 -0
- cecli_dev-0.95.5.dist-info/licenses/LICENSE.txt +202 -0
- cecli_dev-0.95.5.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
---
|
|
2
|
+
parent: More info
|
|
3
|
+
nav_order: 480
|
|
4
|
+
description: Aider can handle "infinite output" from models that support prefill.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Infinite output
|
|
8
|
+
|
|
9
|
+
LLM providers limit how much output a model can generate from a single request.
|
|
10
|
+
This is usually called the output token limit.
|
|
11
|
+
|
|
12
|
+
Aider is able to work around this limit with models that support
|
|
13
|
+
"prefilling" the assistant response.
|
|
14
|
+
When you use aider with a model that supports prefill, you will see
|
|
15
|
+
"infinite output" noted in the announcement lines displayed at launch:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Aider v0.58.0
|
|
19
|
+
Main model: claude-3-5-sonnet-20240620 with diff edit format, prompt cache, infinite output
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Models that support prefill can be primed to think they started their response
|
|
23
|
+
with a specific piece of text.
|
|
24
|
+
You can put words in their mouth, and they will continue generating
|
|
25
|
+
text from that point forward.
|
|
26
|
+
|
|
27
|
+
When aider is collecting code edits from a model and
|
|
28
|
+
it hits the output token limit,
|
|
29
|
+
aider simply initiates another LLM request with the partial
|
|
30
|
+
response prefilled.
|
|
31
|
+
This prompts the model to continue where it left off,
|
|
32
|
+
generating more of the desired response.
|
|
33
|
+
This prefilling of the partially completed response can be repeated,
|
|
34
|
+
allowing for very long outputs.
|
|
35
|
+
Joining the text across these output limit boundaries
|
|
36
|
+
requires some heuristics, but is typically fairly reliable.
|
|
37
|
+
|
|
38
|
+
Aider supports "infinite output" for models that support "prefill",
|
|
39
|
+
such as:
|
|
40
|
+
|
|
41
|
+
<!--[[[cog
|
|
42
|
+
import requests
|
|
43
|
+
import json
|
|
44
|
+
|
|
45
|
+
# Fetch the JSON data
|
|
46
|
+
url = "https://raw.githubusercontent.com/BerriAI/litellm/refs/heads/main/model_prices_and_context_window.json"
|
|
47
|
+
response = requests.get(url)
|
|
48
|
+
data = json.loads(response.text)
|
|
49
|
+
|
|
50
|
+
# Process the JSON to find models with supports_assistant_prefill=true
|
|
51
|
+
prefill_models = [model for model, info in data.items() if info.get('supports_assistant_prefill') == True]
|
|
52
|
+
|
|
53
|
+
# Generate the list of models
|
|
54
|
+
model_list = "\n".join(f"- {model}" for model in sorted(prefill_models))
|
|
55
|
+
|
|
56
|
+
cog.out(model_list)
|
|
57
|
+
]]]-->
|
|
58
|
+
- anthropic.claude-3-5-haiku-20241022-v1:0
|
|
59
|
+
- anthropic.claude-3-5-sonnet-20241022-v2:0
|
|
60
|
+
- anthropic.claude-3-7-sonnet-20240620-v1:0
|
|
61
|
+
- anthropic.claude-3-7-sonnet-20250219-v1:0
|
|
62
|
+
- anthropic.claude-haiku-4-5-20251001-v1:0
|
|
63
|
+
- anthropic.claude-haiku-4-5@20251001
|
|
64
|
+
- anthropic.claude-opus-4-1-20250805-v1:0
|
|
65
|
+
- anthropic.claude-opus-4-20250514-v1:0
|
|
66
|
+
- anthropic.claude-sonnet-4-20250514-v1:0
|
|
67
|
+
- apac.anthropic.claude-3-5-sonnet-20241022-v2:0
|
|
68
|
+
- apac.anthropic.claude-haiku-4-5-20251001-v1:0
|
|
69
|
+
- apac.anthropic.claude-sonnet-4-20250514-v1:0
|
|
70
|
+
- au.anthropic.claude-haiku-4-5-20251001-v1:0
|
|
71
|
+
- au.anthropic.claude-sonnet-4-5-20250929-v1:0
|
|
72
|
+
- azure_ai/mistral-medium-2505
|
|
73
|
+
- bedrock/us-gov-west-1/anthropic.claude-3-7-sonnet-20250219-v1:0
|
|
74
|
+
- bedrock/us.anthropic.claude-3-5-haiku-20241022-v1:0
|
|
75
|
+
- claude-3-5-haiku-20241022
|
|
76
|
+
- claude-3-5-haiku-latest
|
|
77
|
+
- claude-3-5-sonnet-20240620
|
|
78
|
+
- claude-3-5-sonnet-20241022
|
|
79
|
+
- claude-3-5-sonnet-latest
|
|
80
|
+
- claude-3-7-sonnet-20250219
|
|
81
|
+
- claude-3-7-sonnet-latest
|
|
82
|
+
- claude-3-haiku-20240307
|
|
83
|
+
- claude-3-opus-20240229
|
|
84
|
+
- claude-3-opus-latest
|
|
85
|
+
- claude-4-opus-20250514
|
|
86
|
+
- claude-4-sonnet-20250514
|
|
87
|
+
- claude-haiku-4-5
|
|
88
|
+
- claude-haiku-4-5-20251001
|
|
89
|
+
- claude-opus-4-1
|
|
90
|
+
- claude-opus-4-1-20250805
|
|
91
|
+
- claude-opus-4-20250514
|
|
92
|
+
- claude-sonnet-4-20250514
|
|
93
|
+
- claude-sonnet-4-5
|
|
94
|
+
- claude-sonnet-4-5-20250929
|
|
95
|
+
- codestral/codestral-2405
|
|
96
|
+
- codestral/codestral-latest
|
|
97
|
+
- databricks/databricks-claude-3-7-sonnet
|
|
98
|
+
- deepseek/deepseek-chat
|
|
99
|
+
- deepseek/deepseek-coder
|
|
100
|
+
- deepseek/deepseek-r1
|
|
101
|
+
- deepseek/deepseek-reasoner
|
|
102
|
+
- deepseek/deepseek-v3
|
|
103
|
+
- eu.anthropic.claude-3-5-haiku-20241022-v1:0
|
|
104
|
+
- eu.anthropic.claude-3-5-sonnet-20241022-v2:0
|
|
105
|
+
- eu.anthropic.claude-3-7-sonnet-20250219-v1:0
|
|
106
|
+
- eu.anthropic.claude-haiku-4-5-20251001-v1:0
|
|
107
|
+
- eu.anthropic.claude-opus-4-1-20250805-v1:0
|
|
108
|
+
- eu.anthropic.claude-opus-4-20250514-v1:0
|
|
109
|
+
- eu.anthropic.claude-sonnet-4-20250514-v1:0
|
|
110
|
+
- eu.anthropic.claude-sonnet-4-5-20250929-v1:0
|
|
111
|
+
- global.anthropic.claude-haiku-4-5-20251001-v1:0
|
|
112
|
+
- global.anthropic.claude-sonnet-4-20250514-v1:0
|
|
113
|
+
- global.anthropic.claude-sonnet-4-5-20250929-v1:0
|
|
114
|
+
- jp.anthropic.claude-haiku-4-5-20251001-v1:0
|
|
115
|
+
- jp.anthropic.claude-sonnet-4-5-20250929-v1:0
|
|
116
|
+
- mistral/codestral-2405
|
|
117
|
+
- mistral/codestral-latest
|
|
118
|
+
- mistral/codestral-mamba-latest
|
|
119
|
+
- mistral/devstral-medium-2507
|
|
120
|
+
- mistral/devstral-small-2505
|
|
121
|
+
- mistral/devstral-small-2507
|
|
122
|
+
- mistral/magistral-medium-2506
|
|
123
|
+
- mistral/magistral-medium-2509
|
|
124
|
+
- mistral/magistral-medium-latest
|
|
125
|
+
- mistral/magistral-small-2506
|
|
126
|
+
- mistral/magistral-small-latest
|
|
127
|
+
- mistral/mistral-large-2402
|
|
128
|
+
- mistral/mistral-large-2407
|
|
129
|
+
- mistral/mistral-large-2411
|
|
130
|
+
- mistral/mistral-large-latest
|
|
131
|
+
- mistral/mistral-medium
|
|
132
|
+
- mistral/mistral-medium-2312
|
|
133
|
+
- mistral/mistral-medium-2505
|
|
134
|
+
- mistral/mistral-medium-latest
|
|
135
|
+
- mistral/mistral-small
|
|
136
|
+
- mistral/mistral-small-latest
|
|
137
|
+
- mistral/mistral-tiny
|
|
138
|
+
- mistral/open-codestral-mamba
|
|
139
|
+
- mistral/open-mistral-7b
|
|
140
|
+
- mistral/open-mistral-nemo
|
|
141
|
+
- mistral/open-mistral-nemo-2407
|
|
142
|
+
- mistral/open-mixtral-8x22b
|
|
143
|
+
- mistral/open-mixtral-8x7b
|
|
144
|
+
- mistral/pixtral-12b-2409
|
|
145
|
+
- mistral/pixtral-large-2411
|
|
146
|
+
- mistral/pixtral-large-latest
|
|
147
|
+
- openrouter/anthropic/claude-3.5-sonnet
|
|
148
|
+
- openrouter/anthropic/claude-3.7-sonnet
|
|
149
|
+
- openrouter/anthropic/claude-haiku-4.5
|
|
150
|
+
- openrouter/anthropic/claude-opus-4
|
|
151
|
+
- openrouter/anthropic/claude-opus-4.1
|
|
152
|
+
- openrouter/anthropic/claude-sonnet-4
|
|
153
|
+
- openrouter/anthropic/claude-sonnet-4.5
|
|
154
|
+
- openrouter/deepseek/deepseek-chat-v3.1
|
|
155
|
+
- openrouter/deepseek/deepseek-r1
|
|
156
|
+
- openrouter/deepseek/deepseek-r1-0528
|
|
157
|
+
- openrouter/deepseek/deepseek-v3.2-exp
|
|
158
|
+
- us.anthropic.claude-3-5-haiku-20241022-v1:0
|
|
159
|
+
- us.anthropic.claude-3-5-sonnet-20241022-v2:0
|
|
160
|
+
- us.anthropic.claude-3-7-sonnet-20250219-v1:0
|
|
161
|
+
- us.anthropic.claude-haiku-4-5-20251001-v1:0
|
|
162
|
+
- us.anthropic.claude-opus-4-1-20250805-v1:0
|
|
163
|
+
- us.anthropic.claude-opus-4-20250514-v1:0
|
|
164
|
+
- us.anthropic.claude-sonnet-4-20250514-v1:0
|
|
165
|
+
- us.anthropic.claude-sonnet-4-5-20250929-v1:0
|
|
166
|
+
- vertex_ai/claude-3-5-haiku
|
|
167
|
+
- vertex_ai/claude-3-5-haiku@20241022
|
|
168
|
+
- vertex_ai/claude-3-5-sonnet
|
|
169
|
+
- vertex_ai/claude-3-5-sonnet-v2
|
|
170
|
+
- vertex_ai/claude-3-5-sonnet-v2@20241022
|
|
171
|
+
- vertex_ai/claude-3-5-sonnet@20240620
|
|
172
|
+
- vertex_ai/claude-3-7-sonnet@20250219
|
|
173
|
+
- vertex_ai/claude-3-haiku
|
|
174
|
+
- vertex_ai/claude-3-haiku@20240307
|
|
175
|
+
- vertex_ai/claude-3-opus
|
|
176
|
+
- vertex_ai/claude-3-opus@20240229
|
|
177
|
+
- vertex_ai/claude-3-sonnet
|
|
178
|
+
- vertex_ai/claude-3-sonnet@20240229
|
|
179
|
+
- vertex_ai/claude-haiku-4-5@20251001
|
|
180
|
+
- vertex_ai/claude-opus-4
|
|
181
|
+
- vertex_ai/claude-opus-4-1
|
|
182
|
+
- vertex_ai/claude-opus-4-1@20250805
|
|
183
|
+
- vertex_ai/claude-opus-4@20250514
|
|
184
|
+
- vertex_ai/claude-sonnet-4
|
|
185
|
+
- vertex_ai/claude-sonnet-4-5
|
|
186
|
+
- vertex_ai/claude-sonnet-4-5@20250929
|
|
187
|
+
- vertex_ai/claude-sonnet-4@20250514
|
|
188
|
+
- vertex_ai/deepseek-ai/deepseek-r1-0528-maas
|
|
189
|
+
- vertex_ai/deepseek-ai/deepseek-v3.1-maas
|
|
190
|
+
<!--[[[end]]]-->
|
|
191
|
+
|
|
192
|
+
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
parent: Screen recordings
|
|
3
|
+
nav_order: 1
|
|
4
|
+
layout: minimal
|
|
5
|
+
highlight_image: /assets/recordings.jpg
|
|
6
|
+
description: See how a new command-line option is added to automatically accept edits proposed by the architect model, with implementation. Aider also updates the project's HISTORY file.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Add --auto-accept-architect feature
|
|
10
|
+
|
|
11
|
+
<script>
|
|
12
|
+
const recording_id = "auto-accept-architect";
|
|
13
|
+
const recording_url = "https://gist.githubusercontent.com/paul-gauthier/e7383fbc29c9bb343ee6fb7ee5d77e15/raw/c2194334085304bb1c6bb80814d791704d9719b6/707774.cast";
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
{% include recording.md %}
|
|
17
|
+
|
|
18
|
+
## Commentary
|
|
19
|
+
|
|
20
|
+
- 0:01 We're going to add a new feature to automatically accept edits proposed by the architect model.
|
|
21
|
+
- 0:11 First, let's add the new switch.
|
|
22
|
+
- 0:40 Aider figured out that it should be passed to the Coder class.
|
|
23
|
+
- 0:48 Now we need to implement the functionality.
|
|
24
|
+
- 1:00 Let's do some manual testing.
|
|
25
|
+
- 1:28 That worked. Let's make sure we can turn it off too.
|
|
26
|
+
- 1:42 That worked too. Let's have aider update the HISTORY file to document the new feature.
|
|
27
|
+
- 2:00 Let's quickly tidy up the changes to HISTORY.
|
|
28
|
+
- 2:05 All done!
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
parent: Screen recordings
|
|
3
|
+
nav_order: 1
|
|
4
|
+
layout: minimal
|
|
5
|
+
highlight_image: /assets/recordings.jpg
|
|
6
|
+
description: Follow along as aider is modified to preserve read-only files specified at launch when using the /drop command. Aider does this implementation and adds test coverage.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Don't /drop read-only files added at launch
|
|
10
|
+
|
|
11
|
+
<script>
|
|
12
|
+
const recording_id = "dont-drop-original-read-files";
|
|
13
|
+
const recording_url = "https://gist.githubusercontent.com/paul-gauthier/c2e7b2751925fb7bb47036cdd37ec40d/raw/08e62ab539e2b5d4b52c15c31d9a0d241377c17c/707583.cast";
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
{% include recording.md %}
|
|
17
|
+
|
|
18
|
+
## Commentary
|
|
19
|
+
|
|
20
|
+
- 0:01 We're going to update the /drop command to keep any read only files that were originally specified at launch.
|
|
21
|
+
- 0:10 We've added files that handle the main CLI and in-chat slash commands like /drop.
|
|
22
|
+
- 0:20 Let's explain the needed change to aider.
|
|
23
|
+
- 1:20 Ok, let's look at the code.
|
|
24
|
+
- 1:30 I'd prefer not to use "hasattr()", let's ask for improvements.
|
|
25
|
+
- 1:45 Let's try some manual testing.
|
|
26
|
+
- 2:10 Looks good. Let's check the existing test suite to ensure we didn't break anything.
|
|
27
|
+
- 2:19 Let's ask aider to add tests for this.
|
|
28
|
+
- 2:50 Tests look reasonable, we're done!
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Screen recordings
|
|
3
|
+
has_children: true
|
|
4
|
+
nav_order: 75
|
|
5
|
+
has_toc: false
|
|
6
|
+
description: Screen recordings of aider building aider.
|
|
7
|
+
highlight_image: /assets/recordings.jpg
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Screen recordings
|
|
11
|
+
|
|
12
|
+
Below are a series of screen recordings of the aider developer using aider
|
|
13
|
+
to enhance aider.
|
|
14
|
+
They contain commentary that describes how aider is being used,
|
|
15
|
+
and might provide some inspiration for your own use of aider.
|
|
16
|
+
|
|
17
|
+
{% assign sorted_pages = site.pages | where: "parent", "Screen recordings" | sort: "nav_order" %}
|
|
18
|
+
{% for page in sorted_pages %}
|
|
19
|
+
- [{{ page.title }}]({{ page.url | relative_url }}) - {{ page.description }}
|
|
20
|
+
{% endfor %}
|
|
21
|
+
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
parent: Screen recordings
|
|
3
|
+
nav_order: 1
|
|
4
|
+
layout: minimal
|
|
5
|
+
highlight_image: /assets/recordings.jpg
|
|
6
|
+
description: Watch the implementation of a warning system that alerts users when they try to apply reasoning settings to models that don't support them. Includes adding model metadata, confirmation dialogs, refactoring, and comprehensive test coverage.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Warn when users apply unsupported reasoning settings
|
|
10
|
+
|
|
11
|
+
<script>
|
|
12
|
+
const recording_id = "model-accepts-settings";
|
|
13
|
+
const recording_url = "https://gist.githubusercontent.com/paul-gauthier/66b1b5aa7136147702c98afc4987c0d4/raw/4b5c7ddf7e80db1ff4dfa78fe158bc000fc42e0e/accepts-settings.cast";
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
{% include recording.md %}
|
|
17
|
+
|
|
18
|
+
## Commentary
|
|
19
|
+
|
|
20
|
+
- 0:01 Users sometimes run aider with "reasoning" settings that aren't supported by the model they're using. This can cause LLM API calls to completely fail, with non-specific error messages from the API provider. We're going to warn users up front to prevent this.
|
|
21
|
+
- 0:25 Ok, let's ask aider to add a new model setting where we can note which reasoning settings it supports. And then print a warning if the user tries to apply an unsupported setting.
|
|
22
|
+
- 1:30 Looks like it's including some extra changes we don't want.
|
|
23
|
+
- 1:45 Let's have a look at the models code and clean up some stray lines.
|
|
24
|
+
- 2:00 It also made the warning logic too conservative. We want to warn unless the setting is explicitly known to be supported.
|
|
25
|
+
- 3:00 Ok, good. Now lets add a setting to silence these warnings for power users who are doing something intentional.
|
|
26
|
+
- 3:45 Now we need to update the database of model settings to annotate which models support which reasoning settings. We'll start with the code that handles "fallback" settings for known models on unknown providers.
|
|
27
|
+
- 4:45 Oh, we forgot to give aider the actual file with that code! Aider asks to see it.
|
|
28
|
+
- 5:00 Ok, we've confused aider by asking it to change code it couldn't see.
|
|
29
|
+
- 5:10 Let's clear the chat and refine the prompt and try again.
|
|
30
|
+
- 6:00 Ok, looks good. Let's move on and update the full model settings database YAML file. Each main model like "o1" appears here from many providers, like OpenAI, OpenRouter, etc. We want to update them all.
|
|
31
|
+
- 7:43 Let's interrupt and refine the prompt to be more clear about which models to update.
|
|
32
|
+
- 9:20 Looks good. Let's review the YAML file and eyeball all the relevant models.
|
|
33
|
+
- 10:20 Now let's do some manual testing.
|
|
34
|
+
- 10:41 Ok, it should not be warning us about using "thinking tokens" with Sonnet 3.7.
|
|
35
|
+
- 10:55 Let's see if aider can spot the problem?
|
|
36
|
+
- 11:28 That doesn't sound like a promising solution. Let's add more of the relevant code, clear history and try again.
|
|
37
|
+
- 12:00 Ok, let's try aider's proposed solution.
|
|
38
|
+
- 12:32 And see if it worked... Nope! Still getting the unneeded warning. Undo that change!
|
|
39
|
+
- 12:48 Time for some manual print debugging.
|
|
40
|
+
- 13:00 It seems like the "accept_settings" value is not being set?
|
|
41
|
+
- 14:30 Aha! I have a local model settings file for Sonnet which overrides aider's built in settings. And we did not update it. Let's add "accepts_settings" there.
|
|
42
|
+
- 14:45 That was the problem, it wasn't a bug.
|
|
43
|
+
- 14:59 Ok, let's add test coverage for all this stuff.
|
|
44
|
+
- 15:09 And while aider writes tests, let's use "git diff" to review all the changes we've made.
|
|
45
|
+
- 15:34 Aider is done writing tests, let's try them.
|
|
46
|
+
- 15:44 One passed, one failed. Let's eyeball the passing test first.
|
|
47
|
+
- 16:04 And let's see if aider can fix the failing test.
|
|
48
|
+
- 16:14 Aider needs to see another file, which makes sense.
|
|
49
|
+
- 16:29 It's found the problem, but is trying to "fix" the code. We want it to fix the test.
|
|
50
|
+
- 16:47 Ok, tests are passing.
|
|
51
|
+
- 16:55 We should stop and ask the user "are you sure?", not just flash a warning if they're about to break their API calls.
|
|
52
|
+
- 17:59 Ok, that confirmation dialog looks good.
|
|
53
|
+
- 18:35 This code is a little bit repetitive. Let's do a bit of refactoring.
|
|
54
|
+
- 19:44 Sonnet is messing up the code editing instructions, so aider is retrying.
|
|
55
|
+
- 19:54 Let's clear the chat history and try again.
|
|
56
|
+
- 20:25 Are tests still passing after the refactor?
|
|
57
|
+
- 20:55 Tests passed, good. Let's tweak the warning text.
|
|
58
|
+
- 21:10 And now let's have aider update the docs to explain these changes.
|
|
59
|
+
- 22:32 Let's proofread and edit the updated docs.
|
|
60
|
+
- 24:25 And a "git diff" of all the docs changes to do a final check.
|
|
61
|
+
- 24:56 Let's have aider update the project's HISTORY file.
|
|
62
|
+
- 25:35 We can refine the HISTORY entries a bit.
|
|
63
|
+
- 26:20 All done!
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
parent: Screen recordings
|
|
3
|
+
nav_order: 0
|
|
4
|
+
layout: minimal
|
|
5
|
+
highlight_image: /assets/recordings.jpg
|
|
6
|
+
description: Watch how aider adds support for tons of new programming languages by integrating with tree-sitter-language-pack. Demonstrates using aider to script downloading a collection of files, and using ad-hoc bash scripts to have aider modify a collection of files.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Add language support via tree-sitter-language-pack
|
|
10
|
+
|
|
11
|
+
<script>
|
|
12
|
+
const recording_id = "tree-sitter-language-pack";
|
|
13
|
+
const recording_url = "https://gist.githubusercontent.com/paul-gauthier/a990333449b09e2793088a45eb1587f4/raw/364124781cca282907ccdc7567cdfc588a9b438b/tmp.redacted.cast";
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
{% include recording.md %}
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
## Commentary
|
|
20
|
+
|
|
21
|
+
- 0:01 We're going to add a ton of new languages to aider via tree-sitter-language-pack.
|
|
22
|
+
- 0:10 First, lets try and find which languages it supports.
|
|
23
|
+
- 1:00 Ok, there's a language definitions json file
|
|
24
|
+
- 1:10 Does it have the github repos for each language?
|
|
25
|
+
- 1:29 Ok, this is what we need.
|
|
26
|
+
- 1:45 We need to get all the tags files from each repository for aider's repo-map. Let's have aider write a script to fetch them all.
|
|
27
|
+
- 2:05 We'll show aider the language definitions json file.
|
|
28
|
+
- 3:37 Looks like it can't find most of the tags.scm files.
|
|
29
|
+
- 4:19 Maybe we should have it try other branches besides master?
|
|
30
|
+
- 5:02 Ok, it seems to be downloading them now.
|
|
31
|
+
- 5:55 Let's make it so we can re-run the script and only download files we haven't fetched yet.
|
|
32
|
+
- 6:12 I see lots of tags files, so it's working.
|
|
33
|
+
- 6:30 Ok, restart to run with latest code. This will take awhile to fetch them all.
|
|
34
|
+
- 9:02 The Grep-AST module needs to know about all the new languages.
|
|
35
|
+
- 9:45 Let's have aider add them all, and register each using their commonly used file extensions.
|
|
36
|
+
- 10:15 Some of the languages need to be recognized by their base name, not by their extension.
|
|
37
|
+
- 11:15 Let's sanity check if Grep-AST can handle PowerShell, one of the new languages.
|
|
38
|
+
- 12:00 Looks like it's parsing PowerShell fine.
|
|
39
|
+
- 13:00 Ok, let's download all the tags files into the right spot in the aider repo.
|
|
40
|
+
- 14:00 This will take a minute...
|
|
41
|
+
- 16:07 Delete some no-op or empty tags files.
|
|
42
|
+
- 16:16 Let's commit all the unmodified tags files.
|
|
43
|
+
- 16:33 We need to update each tag file, so that aider can identify names of functions, classes, etc in all these languages.
|
|
44
|
+
- 17:01 Let's use a bash loop to script aider to modify each tags file.
|
|
45
|
+
- 17:12 I'm giving aider a read-only example of an already modified tags file, as an example to follow.
|
|
46
|
+
- 19:04 Looks like it correctly updated the first couple of tags files.
|
|
47
|
+
- 19:28 Let's grep to watch aider's progress working through the list of files.
|
|
48
|
+
- 20:20 It's working on the Dart language now...
|
|
49
|
+
- 20:50 E-lisp is up next...
|
|
50
|
+
- 21:30 This is going to take a little while...
|
|
51
|
+
- 24:39 Let's add a README file with attribution for these tags files.
|
|
52
|
+
- 26:55 Ok, all the files are updated with tags for definitions and references to named code objects.
|
|
53
|
+
- 27:10 Let's add test coverage to be sure these languages work with the repo-map.
|
|
54
|
+
- 27:19 Each language needs a "fixture" with some sample code to parse during the test. Let's show aider the layout of the fixtures directory.
|
|
55
|
+
- 27:50 We can use a bash loop to ask aider to add test coverage for each new tags file.
|
|
56
|
+
- 28:12 We'll pass the fixtures directory listing to aider.
|
|
57
|
+
- 28:52 Just need to fix the bash to correctly iterate through the list of tags files.
|
|
58
|
+
- 29:27 I forgot to ask aider to actually generate a sample code fixture for each language.
|
|
59
|
+
- 30:25 Lets run the repo-map tests to see if the first new test works.
|
|
60
|
+
- 30:37 Tests for the Arduino language failed, with an empty repo-map? That's not good.
|
|
61
|
+
- 31:52 Can aider figure out what's wrong?
|
|
62
|
+
- 32:27 Well, aider made the test pass by basically skipping Arduino.
|
|
63
|
+
- 32:36 Let me see if I can use Grep-AST on the new Arduino fixture code.
|
|
64
|
+
- 32:42 Oh! I'm not using the updated Grep-AST that knows about all the new languages.
|
|
65
|
+
- 32:54 Ok, now we're parsing Arduino code properly. Undo aider's bogus test fix.
|
|
66
|
+
- 33:05 Ok, arduino passes now but there seems to be a regression with tsx?
|
|
67
|
+
- 33:20 Can aider figure out why?
|
|
68
|
+
- 34:10 Let's check the parsers map.
|
|
69
|
+
- 35:00 Well, that's all for this recording. The tsx problem was due to a bad mapping from ".tsx" to "typescript" in the map that aider generated earlier.
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
parent: More info
|
|
3
|
+
highlight_image: /assets/robot-ast.png
|
|
4
|
+
nav_order: 300
|
|
5
|
+
description: Aider uses a map of your git repository to provide code context to LLMs.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Repository map
|
|
9
|
+
|
|
10
|
+

|
|
11
|
+
|
|
12
|
+
Aider
|
|
13
|
+
uses a **concise map of your whole git repository**
|
|
14
|
+
that includes
|
|
15
|
+
the most important classes and functions along with their types and call signatures.
|
|
16
|
+
This helps aider understand the code it's editing
|
|
17
|
+
and how it relates to the other parts of the codebase.
|
|
18
|
+
The repo map also helps aider write new code
|
|
19
|
+
that respects and utilizes existing libraries, modules and abstractions
|
|
20
|
+
found elsewhere in the codebase.
|
|
21
|
+
|
|
22
|
+
## Using a repo map to provide context
|
|
23
|
+
|
|
24
|
+
Aider sends a **repo map** to the LLM along with
|
|
25
|
+
each change request from the user.
|
|
26
|
+
The repo map contains a list of the files in the
|
|
27
|
+
repo, along with the key symbols which are defined in each file.
|
|
28
|
+
It shows how each of these symbols are defined, by including the critical lines of code for each definition.
|
|
29
|
+
|
|
30
|
+
Here's a part of
|
|
31
|
+
the repo map of aider's repo, for
|
|
32
|
+
[base_coder.py](https://github.com/Aider-AI/aider/blob/main/aider/coders/base_coder.py)
|
|
33
|
+
and
|
|
34
|
+
[commands.py](https://github.com/Aider-AI/aider/blob/main/aider/commands.py)
|
|
35
|
+
:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
aider/coders/base_coder.py:
|
|
39
|
+
⋮...
|
|
40
|
+
│class Coder:
|
|
41
|
+
│ abs_fnames = None
|
|
42
|
+
⋮...
|
|
43
|
+
│ @classmethod
|
|
44
|
+
│ def create(
|
|
45
|
+
│ self,
|
|
46
|
+
│ main_model,
|
|
47
|
+
│ edit_format,
|
|
48
|
+
│ io,
|
|
49
|
+
│ skip_model_availabily_check=False,
|
|
50
|
+
│ **kwargs,
|
|
51
|
+
⋮...
|
|
52
|
+
│ def abs_root_path(self, path):
|
|
53
|
+
⋮...
|
|
54
|
+
│ def run(self, with_message=None):
|
|
55
|
+
⋮...
|
|
56
|
+
|
|
57
|
+
aider/commands.py:
|
|
58
|
+
⋮...
|
|
59
|
+
│class Commands:
|
|
60
|
+
│ voice = None
|
|
61
|
+
│
|
|
62
|
+
⋮...
|
|
63
|
+
│ def get_commands(self):
|
|
64
|
+
⋮...
|
|
65
|
+
│ def get_command_completions(self, cmd_name, partial):
|
|
66
|
+
⋮...
|
|
67
|
+
│ def run(self, inp):
|
|
68
|
+
⋮...
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Mapping out the repo like this provides some key benefits:
|
|
72
|
+
|
|
73
|
+
- The LLM can see classes, methods and function signatures from everywhere in the repo. This alone may give it enough context to solve many tasks. For example, it can probably figure out how to use the API exported from a module just based on the details shown in the map.
|
|
74
|
+
- If it needs to see more code, the LLM can use the map to figure out which files it needs to look at. The LLM can ask to see these specific files, and aider will offer to add them to the chat context.
|
|
75
|
+
|
|
76
|
+
## Optimizing the map
|
|
77
|
+
|
|
78
|
+
Of course, for large repositories even just the repo map might be too large
|
|
79
|
+
for the LLM's context window.
|
|
80
|
+
Aider solves this problem by sending just the **most relevant**
|
|
81
|
+
portions of the repo map.
|
|
82
|
+
It does this by analyzing the full repo map using
|
|
83
|
+
a graph ranking algorithm, computed on a graph
|
|
84
|
+
where each source file is a node and edges connect
|
|
85
|
+
files which have dependencies.
|
|
86
|
+
Aider optimizes the repo map by
|
|
87
|
+
selecting the most important parts of the codebase
|
|
88
|
+
which will
|
|
89
|
+
fit into the active token budget.
|
|
90
|
+
The optimization identifies and maps the portions of the code base
|
|
91
|
+
which are most relevant to the current state of the chat.
|
|
92
|
+
|
|
93
|
+
The token budget is
|
|
94
|
+
influenced by the `--map-tokens` switch, which defaults to 1k tokens.
|
|
95
|
+
Aider adjusts the size of the repo map dynamically based on the state of the chat. It will usually stay within that setting's value. But it does expand the repo map
|
|
96
|
+
significantly at times, especially when no files have been added to the chat and aider needs to understand the entire repo as best as possible.
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
The sample map shown above doesn't contain *every* class, method and function from those
|
|
100
|
+
files.
|
|
101
|
+
It only includes the most important identifiers,
|
|
102
|
+
the ones which are most often referenced by other portions of the code.
|
|
103
|
+
These are the key pieces of context that the LLM needs to know to understand
|
|
104
|
+
the overall codebase.
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
## More info
|
|
108
|
+
|
|
109
|
+
Please check the
|
|
110
|
+
[repo map article on aider's blog](https://aider.chat/2023/10/22/repomap.html)
|
|
111
|
+
for more information on aider's repository map
|
|
112
|
+
and how it is constructed.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
parent: More info
|
|
3
|
+
nav_order: 400
|
|
4
|
+
description: You can script aider via the command line or python.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Scripting aider
|
|
8
|
+
|
|
9
|
+
You can script aider via the command line or python.
|
|
10
|
+
|
|
11
|
+
## Command line
|
|
12
|
+
|
|
13
|
+
Aider takes a `--message` argument, where you can give it a natural language instruction.
|
|
14
|
+
It will do that one thing, apply the edits to the files and then exit.
|
|
15
|
+
So you could do:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
aider --message "make a script that prints hello" hello.js
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Or you can write simple shell scripts to apply the same instruction to many files:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
for FILE in *.py ; do
|
|
25
|
+
aider --message "add descriptive docstrings to all the functions" $FILE
|
|
26
|
+
done
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Use `aider --help` to see all the
|
|
30
|
+
[command line options](/docs/config/options.html),
|
|
31
|
+
but these are useful for scripting:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
--stream, --no-stream
|
|
35
|
+
Enable/disable streaming responses (default: True) [env var:
|
|
36
|
+
CECLI_STREAM]
|
|
37
|
+
--message COMMAND, --msg COMMAND, -m COMMAND
|
|
38
|
+
Specify a single message to send GPT, process reply then exit
|
|
39
|
+
(disables chat mode) [env var: CECLI_MESSAGE]
|
|
40
|
+
--message-file MESSAGE_FILE, -f MESSAGE_FILE
|
|
41
|
+
Specify a file containing the message to send GPT, process reply,
|
|
42
|
+
then exit (disables chat mode) [env var: CECLI_MESSAGE_FILE]
|
|
43
|
+
--yes Always say yes to every confirmation [env var: CECLI_YES]
|
|
44
|
+
--auto-commits, --no-auto-commits
|
|
45
|
+
Enable/disable auto commit of GPT changes (default: True) [env var:
|
|
46
|
+
CECLI_AUTO_COMMITS]
|
|
47
|
+
--dirty-commits, --no-dirty-commits
|
|
48
|
+
Enable/disable commits when repo is found dirty (default: True) [env
|
|
49
|
+
var: CECLI_DIRTY_COMMITS]
|
|
50
|
+
--dry-run, --no-dry-run
|
|
51
|
+
Perform a dry run without modifying files (default: False) [env var:
|
|
52
|
+
CECLI_DRY_RUN]
|
|
53
|
+
--commit Commit all pending changes with a suitable commit message, then exit
|
|
54
|
+
[env var: CECLI_COMMIT]
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
## Python
|
|
59
|
+
|
|
60
|
+
You can also script aider from python:
|
|
61
|
+
|
|
62
|
+
```python
|
|
63
|
+
from aider.coders import Coder
|
|
64
|
+
from aider.models import Model
|
|
65
|
+
|
|
66
|
+
# This is a list of files to add to the chat
|
|
67
|
+
fnames = ["greeting.py"]
|
|
68
|
+
|
|
69
|
+
model = Model("gpt-4-turbo")
|
|
70
|
+
|
|
71
|
+
# Create a coder object
|
|
72
|
+
coder = Coder.create(main_model=model, fnames=fnames)
|
|
73
|
+
|
|
74
|
+
# This will execute one instruction on those files and then return
|
|
75
|
+
coder.run("make a script that prints hello world")
|
|
76
|
+
|
|
77
|
+
# Send another instruction
|
|
78
|
+
coder.run("make it say goodbye")
|
|
79
|
+
|
|
80
|
+
# You can run in-chat "/" commands too
|
|
81
|
+
coder.run("/tokens")
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
See the
|
|
86
|
+
[Coder.create() and Coder.__init__() methods](https://github.com/Aider-AI/aider/blob/main/aider/coders/base_coder.py)
|
|
87
|
+
for all the supported arguments.
|
|
88
|
+
|
|
89
|
+
It can also be helpful to set the equivalent of `--yes` by doing this:
|
|
90
|
+
|
|
91
|
+
```python
|
|
92
|
+
from aider.io import InputOutput
|
|
93
|
+
io = InputOutput(yes=True)
|
|
94
|
+
# ...
|
|
95
|
+
coder = Coder.create(model=model, fnames=fnames, io=io)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
{: .note }
|
|
99
|
+
The python scripting API is not officially supported or documented,
|
|
100
|
+
and could change in future releases without providing backwards compatibility.
|