Merge branch 'main' into watch

This commit is contained in:
Paul Gauthier 2024-11-01 11:27:29 -07:00
commit b57ad6929c
30 changed files with 584 additions and 89 deletions

View file

@ -1,7 +1,7 @@
# Release history # Release history
### main branch ### Aider v0.61.0
- Load and save aider slash-commands to files: - Load and save aider slash-commands to files:
- `/save <fname>` command will make a file of `/add` and `/read-only` commands that recreate the current file context in the chat. - `/save <fname>` command will make a file of `/add` and `/read-only` commands that recreate the current file context in the chat.
@ -13,9 +13,13 @@
- Bugfix for when diff mode flexibly handles the model using the wrong filename. - Bugfix for when diff mode flexibly handles the model using the wrong filename.
- Displays filenames in sorted order for `/add` and `/read-only`. - Displays filenames in sorted order for `/add` and `/read-only`.
- New `--no-fancy-input` switch disables prompt toolkit input, now still available with `--no-pretty`. - New `--no-fancy-input` switch disables prompt toolkit input, now still available with `--no-pretty`.
- Override browser config with `--no-browser` or `--no-gui`.
- Offer to open documentation URLs when errors occur.
- Properly support all o1 models, regardless of provider. - Properly support all o1 models, regardless of provider.
- Improved layout of filenames above input prompt.
- Better handle corrupted repomap tags cache.
- Improved handling of API errors, especially when accessing the weak model. - Improved handling of API errors, especially when accessing the weak model.
- Aider wrote 70% of the code in this release. - Aider wrote 68% of the code in this release.
### Aider v0.60.1 ### Aider v0.60.1

View file

@ -1,6 +1,6 @@
try: try:
from aider.__version__ import __version__ from aider.__version__ import __version__
except Exception: except Exception:
__version__ = "0.60.2.dev" __version__ = "0.61.1.dev"
__all__ = [__version__] __all__ = [__version__]

View file

@ -702,8 +702,8 @@ def get_parser(default_config_files, git_root):
group.add_argument( group.add_argument(
"--gui", "--gui",
"--browser", "--browser",
action="store_true", action=argparse.BooleanOptionalAction,
help="Run aider in your browser", help="Run aider in your browser (default: False)",
default=False, default=False,
) )
group.add_argument( group.add_argument(

View file

@ -790,8 +790,40 @@ class Coder:
self.num_reflections += 1 self.num_reflections += 1
message = self.reflected_message message = self.reflected_message
def check_and_open_urls(self, text: str) -> List[str]: def check_and_open_urls(self, exc: Exception) -> List[str]:
"""Check text for URLs and offer to open them in a browser.""" import openai
"""Check exception for URLs, offer to open in a browser, with user-friendly error msgs."""
text = str(exc)
friendly_msg = None
if isinstance(exc, (openai.APITimeoutError, openai.APIConnectionError)):
friendly_msg = (
"There is a problem connecting to the API provider. Please try again later or check"
" your model settings."
)
elif isinstance(exc, openai.RateLimitError):
friendly_msg = (
"The API provider's rate limits have been exceeded. Check with your provider or"
" wait awhile and retry."
)
elif isinstance(exc, openai.InternalServerError):
friendly_msg = (
"The API provider seems to be down or overloaded. Please try again later."
)
elif isinstance(exc, openai.BadRequestError):
friendly_msg = "The API provider refused the request as invalid?"
elif isinstance(exc, openai.AuthenticationError):
friendly_msg = (
"The API provider refused your authentication. Please check that you are using a"
" valid API key."
)
if friendly_msg:
self.io.tool_warning(text)
self.io.tool_error(f"{friendly_msg}")
else:
self.io.tool_error(text)
url_pattern = re.compile(r"(https?://[^\s/$.?#].[^\s]*)") url_pattern = re.compile(r"(https?://[^\s/$.?#].[^\s]*)")
urls = list(set(url_pattern.findall(text))) # Use set to remove duplicates urls = list(set(url_pattern.findall(text))) # Use set to remove duplicates
@ -1153,18 +1185,15 @@ class Coder:
break break
except retry_exceptions() as err: except retry_exceptions() as err:
# Print the error and its base classes # Print the error and its base classes
err_msg = str(err) # for cls in err.__class__.__mro__: dump(cls.__name__)
# base_classes = []
# for cls in err.__class__.__mro__: # Skip the class itself
# base_classes.append(cls.__name__)
# if base_classes:
# err_msg += f"\nBase classes: {' -> '.join(base_classes)}"
self.io.tool_error(err_msg)
retry_delay *= 2 retry_delay *= 2
if retry_delay > RETRY_TIMEOUT: if retry_delay > RETRY_TIMEOUT:
self.mdstream = None self.mdstream = None
self.check_and_open_urls(err_msg) self.check_and_open_urls(err)
break break
err_msg = str(err)
self.io.tool_error(err_msg)
self.io.tool_output(f"Retrying in {retry_delay:.1f} seconds...") self.io.tool_output(f"Retrying in {retry_delay:.1f} seconds...")
time.sleep(retry_delay) time.sleep(retry_delay)
continue continue
@ -1193,9 +1222,10 @@ class Coder:
dict(role="assistant", content=self.multi_response_content, prefix=True) dict(role="assistant", content=self.multi_response_content, prefix=True)
) )
except (openai.APIError, openai.APIStatusError) as err: except (openai.APIError, openai.APIStatusError) as err:
# for cls in err.__class__.__mro__: dump(cls.__name__)
self.mdstream = None self.mdstream = None
self.io.tool_error(str(err)) self.check_and_open_urls(err)
self.check_and_open_urls(str(err)) break
except Exception as err: except Exception as err:
lines = traceback.format_exception(type(err), err, err.__traceback__) lines = traceback.format_exception(type(err), err, err.__traceback__)
self.io.tool_warning("".join(lines)) self.io.tool_warning("".join(lines))

View file

@ -1199,6 +1199,13 @@ class Commands:
self.io.tool_error(f"Not a file or directory: {abs_path}") self.io.tool_error(f"Not a file or directory: {abs_path}")
def _add_read_only_file(self, abs_path, original_name): def _add_read_only_file(self, abs_path, original_name):
if is_image_file(original_name) and not self.coder.main_model.info.get("supports_vision"):
self.io.tool_error(
f"Cannot add image file {original_name} as the"
f" {self.coder.main_model.name} does not support images."
)
return
if abs_path in self.coder.abs_read_only_fnames: if abs_path in self.coder.abs_read_only_fnames:
self.io.tool_error(f"{original_name} is already in the chat as a read-only file") self.io.tool_error(f"{original_name} is already in the chat as a read-only file")
return return
@ -1290,6 +1297,7 @@ class Commands:
try: try:
with open(args.strip(), "w", encoding=self.io.encoding) as f: with open(args.strip(), "w", encoding=self.io.encoding) as f:
f.write("/drop\n")
# Write commands to add editable files # Write commands to add editable files
for fname in sorted(self.coder.abs_fnames): for fname in sorted(self.coder.abs_fnames):
rel_fname = self.coder.get_rel_fname(fname) rel_fname = self.coder.get_rel_fname(fname)

View file

@ -4,6 +4,7 @@ import threading
from collections import defaultdict from collections import defaultdict
from dataclasses import dataclass from dataclasses import dataclass
from datetime import datetime from datetime import datetime
from io import StringIO
from pathlib import Path from pathlib import Path
from prompt_toolkit.completion import Completer, Completion, ThreadedCompleter from prompt_toolkit.completion import Completer, Completion, ThreadedCompleter
@ -16,6 +17,7 @@ from prompt_toolkit.shortcuts import CompleteStyle, PromptSession
from prompt_toolkit.styles import Style from prompt_toolkit.styles import Style
from pygments.lexers import MarkdownLexer, guess_lexer_for_filename from pygments.lexers import MarkdownLexer, guess_lexer_for_filename
from pygments.token import Token from pygments.token import Token
from rich.columns import Columns
from rich.console import Console from rich.console import Console
from rich.markdown import Markdown from rich.markdown import Markdown
from rich.style import Style as RichStyle from rich.style import Style as RichStyle
@ -748,17 +750,35 @@ class InputOutput:
self.chat_history_file = None # Disable further attempts to write self.chat_history_file = None # Disable further attempts to write
def format_files_for_input(self, rel_fnames, rel_read_only_fnames): def format_files_for_input(self, rel_fnames, rel_read_only_fnames):
read_only_files = [] if not self.pretty:
for full_path in sorted(rel_read_only_fnames or []): read_only_files = []
read_only_files.append(f"{full_path} (read only)") for full_path in sorted(rel_read_only_fnames or []):
read_only_files.append(f"{full_path} (read only)")
editable_files = [] editable_files = []
for full_path in sorted(rel_fnames): for full_path in sorted(rel_fnames):
if full_path in rel_read_only_fnames: if full_path in rel_read_only_fnames:
continue continue
editable_files.append(f"{full_path}") editable_files.append(f"{full_path}")
return "\n".join(read_only_files + editable_files) + "\n" return "\n".join(read_only_files + editable_files) + "\n"
output = StringIO()
console = Console(file=output, force_terminal=False)
read_only_files = sorted(rel_read_only_fnames or [])
editable_files = [f for f in sorted(rel_fnames) if f not in rel_read_only_fnames]
if read_only_files:
console.print("Read only files:", style="bold")
console.print(Columns(read_only_files))
if editable_files:
if read_only_files:
console.print()
console.print("Editable files:", style="bold")
console.print(Columns(editable_files))
return output.getvalue()
def get_rel_fname(fname, root): def get_rel_fname(fname, root):

View file

@ -221,7 +221,12 @@ def basic_lint(fname, code):
tree = parser.parse(bytes(code, "utf-8")) tree = parser.parse(bytes(code, "utf-8"))
errors = traverse_tree(tree.root_node) try:
errors = traverse_tree(tree.root_node)
except RecursionError:
print(f"Unable to lint {fname} due to RecursionError")
return
if not errors: if not errors:
return return

View file

@ -298,6 +298,23 @@ MODEL_SETTINGS = [
cache_control=True, cache_control=True,
reminder="user", reminder="user",
), ),
ModelSettings(
"anthropic/claude-3-5-sonnet-latest",
"diff",
weak_model_name="anthropic/claude-3-haiku-20240307",
editor_model_name="anthropic/claude-3-5-sonnet-20241022",
editor_edit_format="editor-diff",
use_repo_map=True,
examples_as_sys_msg=True,
extra_params={
"extra_headers": {
"anthropic-beta": ANTHROPIC_BETA_HEADER,
},
"max_tokens": 8192,
},
cache_control=True,
reminder="user",
),
ModelSettings( ModelSettings(
"claude-3-5-sonnet-20241022", "claude-3-5-sonnet-20241022",
"diff", "diff",

View file

@ -275,8 +275,12 @@ class Spinner:
self.start_time = time.time() self.start_time = time.time()
self.last_update = 0 self.last_update = 0
self.visible = False self.visible = False
self.is_tty = sys.stdout.isatty()
def step(self): def step(self):
if not self.is_tty:
return
current_time = time.time() current_time = time.time()
if not self.visible and current_time - self.start_time >= 0.5: if not self.visible and current_time - self.start_time >= 0.5:
self.visible = True self.visible = True
@ -292,7 +296,7 @@ class Spinner:
print(f"\r{self.text} {next(self.spinner_chars)}\r{self.text} ", end="", flush=True) print(f"\r{self.text} {next(self.spinner_chars)}\r{self.text} ", end="", flush=True)
def end(self): def end(self):
if self.visible: if self.visible and self.is_tty:
print("\r" + " " * (len(self.text) + 3)) print("\r" + " " * (len(self.text) + 3))

View file

@ -19,7 +19,7 @@ cog.out(text)
### main branch ### Aider v0.61.0
- Load and save aider slash-commands to files: - Load and save aider slash-commands to files:
- `/save <fname>` command will make a file of `/add` and `/read-only` commands that recreate the current file context in the chat. - `/save <fname>` command will make a file of `/add` and `/read-only` commands that recreate the current file context in the chat.
@ -31,9 +31,13 @@ cog.out(text)
- Bugfix for when diff mode flexibly handles the model using the wrong filename. - Bugfix for when diff mode flexibly handles the model using the wrong filename.
- Displays filenames in sorted order for `/add` and `/read-only`. - Displays filenames in sorted order for `/add` and `/read-only`.
- New `--no-fancy-input` switch disables prompt toolkit input, now still available with `--no-pretty`. - New `--no-fancy-input` switch disables prompt toolkit input, now still available with `--no-pretty`.
- Override browser config with `--no-browser` or `--no-gui`.
- Offer to open documentation URLs when errors occur.
- Properly support all o1 models, regardless of provider. - Properly support all o1 models, regardless of provider.
- Improved layout of filenames above input prompt.
- Better handle corrupted repomap tags cache.
- Improved handling of API errors, especially when accessing the weak model. - Improved handling of API errors, especially when accessing the weak model.
- Aider wrote 70% of the code in this release. - Aider wrote 68% of the code in this release.
### Aider v0.60.1 ### Aider v0.60.1

View file

@ -2819,3 +2819,79 @@
fry69: 18 fry69: 18
start_tag: v0.59.0 start_tag: v0.59.0
total_lines: 285 total_lines: 285
- aider_percentage: 67.61
aider_total: 860
end_date: '2024-11-01'
end_tag: v0.61.0
file_counts:
aider/__init__.py:
Paul Gauthier: 1
aider/analytics.py:
Paul Gauthier: 75
Paul Gauthier (aider): 89
aider/args.py:
Paul Gauthier: 5
Paul Gauthier (aider): 29
aider/coders/base_coder.py:
Paul Gauthier: 56
Paul Gauthier (aider): 43
aider/coders/editblock_coder.py:
Paul Gauthier: 14
aider/commands.py:
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: 48
Paul Gauthier (aider): 10
aider/models.py:
Paul Gauthier: 54
Paul Gauthier (aider): 63
kAIto47802: 4
aider/repomap.py:
Paul Gauthier: 12
Paul Gauthier (aider): 52
aider/sendchat.py:
Paul Gauthier: 23
Paul Gauthier (aider): 23
aider/urls.py:
Paul Gauthier: 2
aider/utils.py:
Paul Gauthier (aider): 6
scripts/issues.py:
Paul Gauthier (aider): 13
scripts/pip-compile.sh:
Paul Gauthier (aider): 13
scripts/update-docs.sh:
Paul Gauthier: 1
Paul Gauthier (aider): 5
tests/basic/test_analytics.py:
Paul Gauthier: 1
Paul Gauthier (aider): 99
tests/basic/test_commands.py:
Konstantin L: 34
Paul Gauthier: 45
Paul Gauthier (aider): 267
tests/basic/test_io.py:
Paul Gauthier: 2
Paul Gauthier (aider): 4
tests/basic/test_main.py:
Paul Gauthier (aider): 3
tests/basic/test_models.py:
Paul Gauthier: 3
Paul Gauthier (aider): 9
tests/basic/test_sanity_check_repo.py:
Paul Gauthier (aider): 6
tests/basic/test_sendchat.py:
Paul Gauthier (aider): 8
grand_total:
Konstantin L: 34
Paul Gauthier: 374
Paul Gauthier (aider): 860
kAIto47802: 4
start_tag: v0.60.0
total_lines: 1272

View file

@ -12,6 +12,10 @@ nav_exclude: true
[![self assembly](/assets/self-assembly.jpg)](https://aider.chat/assets/self-assembly.jpg) [![self assembly](/assets/self-assembly.jpg)](https://aider.chat/assets/self-assembly.jpg)
{: .note }
This article is quite out dated. For current statistics, see
[aider's release history](/HISTORY.html).
The The
[aider git repo](https://github.com/Aider-AI/aider) [aider git repo](https://github.com/Aider-AI/aider)
currently contains about 4K commits and 14K lines of code. currently contains about 4K commits and 14K lines of code.

View file

@ -221,3 +221,135 @@
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730409766} {"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730409766}
{"event": "cli session", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730409766} {"event": "cli session", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730409766}
{"event": "command_exit", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730409782} {"event": "command_exit", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730409782}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730410248}
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730410250}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730410851}
{"event": "cli session", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730410852}
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730410896}
{"event": "command_chat-mode", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730410902}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "ask", "prompt_tokens": 6309, "completion_tokens": 904, "total_tokens": 7213, "cost": 0.032487, "total_cost": 0.032487, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730410958}
{"event": "command_code", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730410990}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 9288, "completion_tokens": 448, "total_tokens": 9736, "cost": 0.034584000000000004, "total_cost": 0.067071, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411002}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411007}
{"event": "cli session", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411007}
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411013}
{"event": "command_read-only", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411019}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "ask", "prompt_tokens": 7880, "completion_tokens": 325, "total_tokens": 8205, "cost": 0.028515000000000002, "total_cost": 0.095586, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411067}
{"event": "command_code", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411120}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 10269, "completion_tokens": 375, "total_tokens": 10644, "cost": 0.036432, "total_cost": 0.132018, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411129}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411166}
{"event": "cli session", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411167}
{"event": "command_read-only", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411172}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411220}
{"event": "cli session", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411220}
{"event": "command_read-only", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411222}
{"event": "command_chat-mode", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411276}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 10770, "completion_tokens": 174, "total_tokens": 10944, "cost": 0.03492, "total_cost": 0.166938, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411291}
{"event": "command_exit", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411314}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411351}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411422}
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411423}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411552}
{"event": "model warning", "properties": {"main_model": "anthropic/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "anthropic/REDACTED", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411554}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411577}
{"event": "model warning", "properties": {"main_model": "anthropic/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "anthropic/REDACTED", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411578}
{"event": "cli session", "properties": {"main_model": "anthropic/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "anthropic/REDACTED", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411580}
{"event": "message_send", "properties": {"main_model": "anthropic/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "anthropic/REDACTED", "edit_format": "diff", "prompt_tokens": 2749, "completion_tokens": 52, "total_tokens": 2801, "cost": 0.0, "total_cost": 0.0, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411584}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411627}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411751}
{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411839}
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411842}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 14351, "completion_tokens": 440, "total_tokens": 14791, "cost": 0.049653, "total_cost": 0.216591, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411862}
{"event": "command_undo", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411880}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 14896, "completion_tokens": 266, "total_tokens": 15162, "cost": 0.048678, "total_cost": 0.265269, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411902}
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411941}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 27430, "completion_tokens": 608, "total_tokens": 28038, "cost": 0.09141, "total_cost": 0.35667899999999997, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411960}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 27414, "completion_tokens": 506, "total_tokens": 27920, "cost": 0.089832, "total_cost": 0.446511, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730411984}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 28297, "completion_tokens": 343, "total_tokens": 28640, "cost": 0.090036, "total_cost": 0.536547, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412019}
{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412065}
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412068}
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412073}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412073}
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412074}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 9491, "completion_tokens": 158, "total_tokens": 9649, "cost": 0.030843000000000002, "total_cost": 0.56739, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412084}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412095}
{"event": "cli session", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412095}
{"event": "command_exit", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412096}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412186}
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412187}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412189}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412300}
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412301}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412302}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412321}
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412321}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730412322}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413528}
{"event": "cli session", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413531}
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413534}
{"event": "command_chat-mode", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413538}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "ask", "prompt_tokens": 8811, "completion_tokens": 309, "total_tokens": 9120, "cost": 0.031068000000000002, "total_cost": 0.031068000000000002, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413585}
{"event": "command_run", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413632}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "ask", "prompt_tokens": 15950, "completion_tokens": 330, "total_tokens": 16280, "cost": 0.05280000000000001, "total_cost": 0.08386800000000001, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413669}
{"event": "command_run", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413704}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "ask", "prompt_tokens": 18174, "completion_tokens": 292, "total_tokens": 18466, "cost": 0.058902, "total_cost": 0.14277, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413719}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413935}
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413935}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730413937}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730414047}
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730414048}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730414048}
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730414048}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730414050}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730415697}
{"event": "cli session", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730415697}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 3293, "completion_tokens": 439, "total_tokens": 3732, "cost": 0.016464, "total_cost": 0.016464, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730415752}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 3960, "completion_tokens": 517, "total_tokens": 4477, "cost": 0.019635, "total_cost": 0.036099, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730415790}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730415930}
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730415931}
{"event": "command_drop", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730473870}
{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730473873}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 4607, "completion_tokens": 97, "total_tokens": 4704, "cost": 0.015276, "total_cost": 0.5826659999999999, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730473888}
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730473908}
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730473916}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 5842, "completion_tokens": 604, "total_tokens": 6446, "cost": 0.026586, "total_cost": 0.6092519999999999, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730473929}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730474024}
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730474025}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730474027}
{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477197}
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477206}
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477229}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 18098, "completion_tokens": 632, "total_tokens": 18730, "cost": 0.063774, "total_cost": 0.6730259999999999, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477334}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 18968, "completion_tokens": 219, "total_tokens": 19187, "cost": 0.060189000000000006, "total_cost": 0.733215, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477568}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477576}
{"event": "cli session", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477576}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 19375, "completion_tokens": 91, "total_tokens": 19466, "cost": 0.05949, "total_cost": 0.792705, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477578}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 19587, "completion_tokens": 158, "total_tokens": 19745, "cost": 0.061131, "total_cost": 0.853836, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477585}
{"event": "message_send", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "claude-3-5-sonnet-20241022", "edit_format": "diff", "prompt_tokens": 20082, "completion_tokens": 294, "total_tokens": 20376, "cost": 0.064656, "total_cost": 0.9184920000000001, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477595}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477605}
{"event": "cli session", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477606}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477636}
{"event": "cli session", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477636}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477655}
{"event": "cli session", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477656}
{"event": "message_send", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "prompt_tokens": 37070, "completion_tokens": 0, "total_tokens": 37070, "cost": 0.005560499999999993, "total_cost": 0.005560499999999993, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477731}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477733}
{"event": "cli session", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477733}
{"event": "message_send", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "prompt_tokens": 2022, "completion_tokens": 0, "total_tokens": 2022, "cost": 0.00030329999999999995, "total_cost": 0.00030329999999999995, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477738}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477767}
{"event": "cli session", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477767}
{"event": "message_send", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "prompt_tokens": 674, "completion_tokens": 0, "total_tokens": 674, "cost": 0.00010109999999999999, "total_cost": 0.00010109999999999999, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477770}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477789}
{"event": "cli session", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477789}
{"event": "message_send", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "prompt_tokens": 674, "completion_tokens": 0, "total_tokens": 674, "cost": 0.00010109999999999999, "total_cost": 0.00010109999999999999, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477792}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477822}
{"event": "cli session", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477822}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477834}
{"event": "cli session", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477835}
{"event": "message_send", "properties": {"main_model": "gpt-4o-mini", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-mini", "edit_format": "whole", "prompt_tokens": 4044, "completion_tokens": 0, "total_tokens": 4044, "cost": 0.0006066, "total_cost": 0.0006066, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730477852}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730478267}
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730478268}
{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730478719}
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730479180}
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.60.2.dev13+g9e7995b7"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730479181}

View file

@ -350,7 +350,7 @@
## Specify the config file (default: search for .aider.conf.yml in git root, cwd or home directory) ## Specify the config file (default: search for .aider.conf.yml in git root, cwd or home directory)
#config: xxx #config: xxx
## Run aider in your browser ## Run aider in your browser (default: False)
#gui: false #gui: false
## Enable/disable suggesting shell commands (default: True) ## Enable/disable suggesting shell commands (default: True)

View file

@ -333,7 +333,7 @@
## Specify the encoding for input and output (default: utf-8) ## Specify the encoding for input and output (default: utf-8)
#AIDER_ENCODING=utf-8 #AIDER_ENCODING=utf-8
## Run aider in your browser ## Run aider in your browser (default: False)
#AIDER_GUI=false #AIDER_GUI=false
## Enable/disable suggesting shell commands (default: True) ## Enable/disable suggesting shell commands (default: True)

View file

@ -490,6 +490,25 @@ cog.out("```\n")
use_system_prompt: true use_system_prompt: true
use_temperature: true use_temperature: true
weak_model_name: anthropic/claude-3-haiku-20240307 weak_model_name: anthropic/claude-3-haiku-20240307
- cache_control: true
caches_by_default: false
edit_format: diff
editor_edit_format: editor-diff
editor_model_name: anthropic/claude-3-5-sonnet-20241022
examples_as_sys_msg: true
extra_params:
extra_headers:
anthropic-beta: prompt-caching-2024-07-31
max_tokens: 8192
lazy: false
name: anthropic/claude-3-5-sonnet-latest
reminder: user
send_undo_reply: false
streaming: true
use_repo_map: true
use_system_prompt: true
use_temperature: true
weak_model_name: anthropic/claude-3-haiku-20240307
- cache_control: true - cache_control: true
caches_by_default: false caches_by_default: false
edit_format: diff edit_format: diff

View file

@ -406,7 +406,7 @@ cog.outl("```")
## Specify the config file (default: search for .aider.conf.yml in git root, cwd or home directory) ## Specify the config file (default: search for .aider.conf.yml in git root, cwd or home directory)
#config: xxx #config: xxx
## Run aider in your browser ## Run aider in your browser (default: False)
#gui: false #gui: false
## Enable/disable suggesting shell commands (default: True) ## Enable/disable suggesting shell commands (default: True)

View file

@ -375,7 +375,7 @@ cog.outl("```")
## Specify the encoding for input and output (default: utf-8) ## Specify the encoding for input and output (default: utf-8)
#AIDER_ENCODING=utf-8 #AIDER_ENCODING=utf-8
## Run aider in your browser ## Run aider in your browser (default: False)
#AIDER_GUI=false #AIDER_GUI=false
## Enable/disable suggesting shell commands (default: True) ## Enable/disable suggesting shell commands (default: True)

View file

@ -69,7 +69,8 @@ usage: aider [-h] [--openai-api-key] [--anthropic-api-key] [--model]
[--install-main-branch] [--upgrade] [--apply] [--install-main-branch] [--upgrade] [--apply]
[--yes-always] [-v] [--show-repo-map] [--show-prompts] [--yes-always] [-v] [--show-repo-map] [--show-prompts]
[--exit] [--message] [--message-file] [--load] [--exit] [--message] [--message-file] [--load]
[--encoding] [-c] [--gui] [--encoding] [-c]
[--gui | --no-gui | --browser | --no-browser]
[--suggest-shell-commands | --no-suggest-shell-commands] [--suggest-shell-commands | --no-suggest-shell-commands]
[--fancy-input | --no-fancy-input] [--voice-format] [--fancy-input | --no-fancy-input] [--voice-format]
[--voice-language] [--voice-language]
@ -631,12 +632,14 @@ Aliases:
- `--config CONFIG_FILE` - `--config CONFIG_FILE`
### `--gui` ### `--gui`
Run aider in your browser Run aider in your browser (default: False)
Default: False Default: False
Environment variable: `AIDER_GUI` Environment variable: `AIDER_GUI`
Aliases: Aliases:
- `--gui` - `--gui`
- `--no-gui`
- `--browser` - `--browser`
- `--no-browser`
### `--suggest-shell-commands` ### `--suggest-shell-commands`
Enable/disable suggesting shell commands (default: True) Enable/disable suggesting shell commands (default: True)

View file

@ -9,6 +9,10 @@ nav_order: 10
- TOC - TOC
{:toc} {:toc}
## Python version
Aider currently works with python 3.9-3.12.
## Install git ## Install git
Make sure you have git installed. Make sure you have git installed.

View file

@ -1,6 +1,7 @@
--- ---
parent: More info parent: More info
nav_order: 500 nav_order: 500
description: Opt-in, anonymous, no personal info.
--- ---
# Analytics # Analytics

View file

@ -69,6 +69,8 @@ The interactive prompt is built with [prompt-toolkit](https://github.com/prompt-
### Emacs ### Emacs
- `Up Arrow` : Scroll back through previously sent messages.
- `Down Arrow` : Scroll forward through previously sent messages.
- `Ctrl-A` : Move cursor to the start of the line. - `Ctrl-A` : Move cursor to the start of the line.
- `Ctrl-B` : Move cursor back one character. - `Ctrl-B` : Move cursor back one character.
- `Ctrl-D` : Delete the character under the cursor. - `Ctrl-D` : Delete the character under the cursor.
@ -85,6 +87,8 @@ The interactive prompt is built with [prompt-toolkit](https://github.com/prompt-
To use vi/vim keybindings, run aider with the `--vim` switch. To use vi/vim keybindings, run aider with the `--vim` switch.
- `Up Arrow` : Scroll back through previously sent messages.
- `Down Arrow` : Scroll forward through previously sent messages.
- `Esc` : Switch to command mode. - `Esc` : Switch to command mode.
- `i` : Switch to insert mode. - `i` : Switch to insert mode.
- `a` : Move cursor one character to the right and switch to insert mode. - `a` : Move cursor one character to the right and switch to insert mode.

View file

@ -70,7 +70,7 @@ httpcore==1.0.6
# via httpx # via httpx
httpx==0.27.2 httpx==0.27.2
# via openai # via openai
huggingface-hub==0.26.1 huggingface-hub==0.26.2
# via tokenizers # via tokenizers
idna==3.10 idna==3.10
# via # via
@ -86,7 +86,7 @@ importlib-resources==6.4.5
# via -r requirements/requirements.in # via -r requirements/requirements.in
jinja2==3.1.4 jinja2==3.1.4
# via litellm # via litellm
jiter==0.6.1 jiter==0.7.0
# via openai # via openai
json5==0.9.25 json5==0.9.25
# via -r requirements/requirements.in # via -r requirements/requirements.in
@ -96,7 +96,7 @@ jsonschema==4.23.0
# litellm # litellm
jsonschema-specifications==2024.10.1 jsonschema-specifications==2024.10.1
# via jsonschema # via jsonschema
litellm==1.50.4 litellm==1.51.2
# via -r requirements/requirements.in # via -r requirements/requirements.in
markdown-it-py==3.0.0 markdown-it-py==3.0.0
# via rich # via rich
@ -120,7 +120,7 @@ numpy==1.26.4
# via # via
# -r requirements/requirements.in # -r requirements/requirements.in
# scipy # scipy
openai==1.52.2 openai==1.53.0
# via litellm # via litellm
packaging==24.1 packaging==24.1
# via # via
@ -132,7 +132,7 @@ pathspec==0.12.1
# grep-ast # grep-ast
pexpect==4.9.0 pexpect==4.9.0
# via -r requirements/requirements.in # via -r requirements/requirements.in
pillow==11.0.0 pillow==10.4.0
# via -r requirements/requirements.in # via -r requirements/requirements.in
posthog==3.7.0 posthog==3.7.0
# via -r requirements/requirements.in # via -r requirements/requirements.in
@ -187,7 +187,7 @@ requests==2.32.3
# tiktoken # tiktoken
rich==13.9.3 rich==13.9.3
# via -r requirements/requirements.in # via -r requirements/requirements.in
rpds-py==0.20.0 rpds-py==0.20.1
# via # via
# jsonschema # jsonschema
# referencing # referencing
@ -217,7 +217,7 @@ tokenizers==0.19.1
# via # via
# -r requirements/requirements.in # -r requirements/requirements.in
# litellm # litellm
tqdm==4.66.5 tqdm==4.66.6
# via # via
# huggingface-hub # huggingface-hub
# openai # openai
@ -239,7 +239,7 @@ urllib3==2.2.3
# requests # requests
wcwidth==0.2.13 wcwidth==0.2.13
# via prompt-toolkit # via prompt-toolkit
yarl==1.16.0 yarl==1.17.1
# via aiohttp # via aiohttp
zipp==3.20.2 zipp==3.20.2
# via importlib-metadata # via importlib-metadata

View file

@ -2,13 +2,15 @@
# This file is autogenerated by pip-compile with Python 3.12 # This file is autogenerated by pip-compile with Python 3.12
# by the following command: # by the following command:
# #
# pip-compile --output-file=requirements/requirements-browser.txt requirements/requirements-browser.in # pip-compile --constraint=requirements.txt --constraint=requirements/requirements-dev.txt --constraint=requirements/requirements-help.txt --output-file=requirements/requirements-browser.txt requirements/requirements-browser.in
# #
altair==4.2.2 altair==5.4.1
# via streamlit # via streamlit
attrs==24.2.0 attrs==24.2.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-help.txt
# jsonschema # jsonschema
# referencing # referencing
blinker==1.8.2 blinker==1.8.2
@ -17,151 +19,195 @@ cachetools==5.5.0
# via streamlit # via streamlit
certifi==2024.8.30 certifi==2024.8.30
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# -c requirements/requirements-help.txt
# requests # requests
charset-normalizer==3.4.0 charset-normalizer==3.4.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# -c requirements/requirements-help.txt
# requests # requests
click==8.1.7 click==8.1.7
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# -c requirements/requirements-help.txt
# streamlit # streamlit
entrypoints==0.4
# via altair
gitdb==4.0.11 gitdb==4.0.11
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# gitpython # gitpython
gitpython==3.1.43 gitpython==3.1.43
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# streamlit # streamlit
idna==3.10 idna==3.10
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# -c requirements/requirements-help.txt
# requests # requests
importlib-metadata==7.2.1
# via
# -c requirements/../requirements.txt
# streamlit
jinja2==3.1.4 jinja2==3.1.4
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# -c requirements/requirements-help.txt
# altair # altair
# pydeck # pydeck
jsonschema==4.23.0 jsonschema==4.23.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# altair # altair
jsonschema-specifications==2024.10.1 jsonschema-specifications==2024.10.1
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# jsonschema # jsonschema
markdown-it-py==3.0.0 markdown-it-py==3.0.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# rich # rich
markupsafe==3.0.2 markupsafe==3.0.2
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# -c requirements/requirements-help.txt
# jinja2 # jinja2
mdurl==0.1.2 mdurl==0.1.2
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# markdown-it-py # markdown-it-py
narwhals==1.12.1
# via altair
numpy==1.26.4 numpy==1.26.4
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# altair # -c requirements/requirements-dev.txt
# -c requirements/requirements-help.txt
# pandas # pandas
# pyarrow
# pydeck # pydeck
# streamlit # streamlit
packaging==24.1 packaging==24.1
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# -c requirements/requirements-help.txt
# altair
# streamlit # streamlit
pandas==2.2.3 pandas==2.2.3
# via # via
# altair # -c requirements/requirements-dev.txt
# streamlit # streamlit
pillow==11.0.0 pillow==10.4.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# -c requirements/requirements-help.txt
# streamlit # streamlit
protobuf==3.20.3 protobuf==5.28.3
# via streamlit # via streamlit
pyarrow==17.0.0 pyarrow==18.0.0
# via streamlit # via streamlit
pydeck==0.9.1 pydeck==0.9.1
# via streamlit # via streamlit
pygments==2.18.0 pygments==2.18.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# rich # rich
pympler==1.1
# via streamlit
python-dateutil==2.9.0.post0 python-dateutil==2.9.0.post0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# pandas # pandas
# streamlit
pytz==2024.2 pytz==2024.2
# via pandas # via
# -c requirements/requirements-dev.txt
# pandas
referencing==0.35.1 referencing==0.35.1
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# jsonschema # jsonschema
# jsonschema-specifications # jsonschema-specifications
requests==2.32.3 requests==2.32.3
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# -c requirements/requirements-help.txt
# streamlit # streamlit
rich==13.9.3 rich==13.9.3
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# streamlit # streamlit
rpds-py==0.20.0 rpds-py==0.20.1
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# jsonschema # jsonschema
# referencing # referencing
six==1.16.0 six==1.16.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# python-dateutil # python-dateutil
smmap==5.0.1 smmap==5.0.1
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# gitdb # gitdb
streamlit==1.22.0 streamlit==1.39.0
# via -r requirements/requirements-browser.in # via -r requirements/requirements-browser.in
tenacity==8.5.0 tenacity==8.5.0
# via streamlit # via
# -c requirements/requirements-help.txt
# streamlit
toml==0.10.2 toml==0.10.2
# via streamlit # via streamlit
toolz==1.0.0
# via altair
tornado==6.4.1 tornado==6.4.1
# via streamlit # via streamlit
typing-extensions==4.12.2 typing-extensions==4.12.2
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# -c requirements/requirements-help.txt
# altair
# streamlit # streamlit
tzdata==2024.2 tzdata==2024.2
# via pandas # via
tzlocal==5.2 # -c requirements/requirements-dev.txt
# via streamlit # pandas
urllib3==2.2.3 urllib3==2.2.3
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# -c requirements/requirements-help.txt
# requests # requests
validators==0.34.0
# via streamlit
watchdog==4.0.2 watchdog==4.0.2
# via -r requirements/requirements-browser.in # via -r requirements/requirements-browser.in
zipp==3.20.2
# via
# -c requirements/../requirements.txt
# importlib-metadata

View file

@ -2,7 +2,7 @@
# This file is autogenerated by pip-compile with Python 3.12 # This file is autogenerated by pip-compile with Python 3.12
# by the following command: # by the following command:
# #
# pip-compile --output-file=requirements/requirements-dev.txt requirements/requirements-dev.in # pip-compile --constraint=requirements.txt --output-file=requirements/requirements-dev.txt requirements/requirements-dev.in
# #
alabaster==1.0.0 alabaster==1.0.0
# via sphinx # via sphinx
@ -12,16 +12,19 @@ build==1.2.2.post1
# via pip-tools # via pip-tools
certifi==2024.8.30 certifi==2024.8.30
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# requests # requests
cfgv==3.4.0 cfgv==3.4.0
# via pre-commit # via pre-commit
charset-normalizer==3.4.0 charset-normalizer==3.4.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# requests # requests
click==8.1.7 click==8.1.7
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# pip-tools # pip-tools
# typer # typer
@ -45,6 +48,7 @@ docutils==0.21.2
# sphinx-rtd-theme # sphinx-rtd-theme
filelock==3.16.1 filelock==3.16.1
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# virtualenv # virtualenv
fonttools==4.54.1 fonttools==4.54.1
@ -53,6 +57,7 @@ identify==2.6.1
# via pre-commit # via pre-commit
idna==3.10 idna==3.10
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# requests # requests
imagesize==1.4.1 imagesize==1.4.1
@ -63,6 +68,7 @@ iniconfig==2.0.0
# via pytest # via pytest
jinja2==3.1.4 jinja2==3.1.4
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# sphinx # sphinx
kiwisolver==1.4.7 kiwisolver==1.4.7
@ -71,16 +77,19 @@ lox==0.12.0
# via -r requirements/requirements-dev.in # via -r requirements/requirements-dev.in
markdown-it-py==3.0.0 markdown-it-py==3.0.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# rich # rich
markupsafe==3.0.2 markupsafe==3.0.2
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# jinja2 # jinja2
matplotlib==3.9.2 matplotlib==3.9.2
# via -r requirements/requirements-dev.in # via -r requirements/requirements-dev.in
mdurl==0.1.2 mdurl==0.1.2
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# markdown-it-py # markdown-it-py
multiprocess==0.70.17 multiprocess==0.70.17
@ -89,12 +98,14 @@ nodeenv==1.9.1
# via pre-commit # via pre-commit
numpy==1.26.4 numpy==1.26.4
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# contourpy # contourpy
# matplotlib # matplotlib
# pandas # pandas
packaging==24.1 packaging==24.1
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# build # build
# matplotlib # matplotlib
@ -104,8 +115,9 @@ pandas==2.2.3
# via -r requirements/requirements-dev.in # via -r requirements/requirements-dev.in
pathos==0.3.3 pathos==0.3.3
# via lox # via lox
pillow==11.0.0 pillow==10.4.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# matplotlib # matplotlib
pip-tools==7.4.1 pip-tools==7.4.1
@ -122,6 +134,7 @@ pre-commit==4.0.1
# via -r requirements/requirements-dev.in # via -r requirements/requirements-dev.in
pygments==2.18.0 pygments==2.18.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# rich # rich
# sphinx # sphinx
@ -135,6 +148,7 @@ pytest==8.3.3
# via -r requirements/requirements-dev.in # via -r requirements/requirements-dev.in
python-dateutil==2.9.0.post0 python-dateutil==2.9.0.post0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# matplotlib # matplotlib
# pandas # pandas
@ -142,14 +156,17 @@ pytz==2024.2
# via pandas # via pandas
pyyaml==6.0.2 pyyaml==6.0.2
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# pre-commit # pre-commit
requests==2.32.3 requests==2.32.3
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# sphinx # sphinx
rich==13.9.3 rich==13.9.3
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# typer # typer
semver==3.0.2 semver==3.0.2
@ -158,6 +175,7 @@ shellingham==1.5.4
# via typer # via typer
six==1.16.0 six==1.16.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# python-dateutil # python-dateutil
snowballstemmer==2.2.0 snowballstemmer==2.2.0
@ -186,15 +204,17 @@ typer==0.12.5
# via -r requirements/requirements-dev.in # via -r requirements/requirements-dev.in
typing-extensions==4.12.2 typing-extensions==4.12.2
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# typer # typer
tzdata==2024.2 tzdata==2024.2
# via pandas # via pandas
urllib3==2.2.3 urllib3==2.2.3
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# requests # requests
virtualenv==20.27.0 virtualenv==20.27.1
# via pre-commit # via pre-commit
wheel==0.44.0 wheel==0.44.0
# via pip-tools # via pip-tools

View file

@ -2,46 +2,58 @@
# This file is autogenerated by pip-compile with Python 3.12 # This file is autogenerated by pip-compile with Python 3.12
# by the following command: # by the following command:
# #
# pip-compile --output-file=requirements/requirements-help.txt requirements/requirements-help.in # pip-compile --constraint=requirements.txt --constraint=requirements/requirements-dev.txt --output-file=requirements/requirements-help.txt requirements/requirements-help.in
# #
aiohappyeyeballs==2.4.3 aiohappyeyeballs==2.4.3
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# aiohttp # aiohttp
aiohttp==3.10.10 aiohttp==3.10.10
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# huggingface-hub # huggingface-hub
# llama-index-core # llama-index-core
aiosignal==1.3.1 aiosignal==1.3.1
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# aiohttp # aiohttp
annotated-types==0.7.0 annotated-types==0.7.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# pydantic # pydantic
anyio==4.6.2.post1 anyio==4.6.2.post1
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# httpx # httpx
attrs==24.2.0 attrs==24.2.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# aiohttp # aiohttp
certifi==2024.8.30 certifi==2024.8.30
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# httpcore # httpcore
# httpx # httpx
# requests # requests
charset-normalizer==3.4.0 charset-normalizer==3.4.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# requests # requests
click==8.1.7 click==8.1.7
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# nltk # nltk
dataclasses-json==0.6.7 dataclasses-json==0.6.7
# via llama-index-core # via llama-index-core
@ -51,17 +63,21 @@ dirtyjson==1.0.8
# via llama-index-core # via llama-index-core
filelock==3.16.1 filelock==3.16.1
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# huggingface-hub # huggingface-hub
# torch # torch
# transformers # transformers
frozenlist==1.5.0 frozenlist==1.5.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# aiohttp # aiohttp
# aiosignal # aiosignal
fsspec==2024.10.0 fsspec==2024.10.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# huggingface-hub # huggingface-hub
# llama-index-core # llama-index-core
@ -72,18 +88,22 @@ greenlet==3.0.3
# sqlalchemy # sqlalchemy
h11==0.14.0 h11==0.14.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# httpcore # httpcore
httpcore==1.0.6 httpcore==1.0.6
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# httpx # httpx
httpx==0.27.2 httpx==0.27.2
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# llama-index-core # llama-index-core
huggingface-hub[inference]==0.26.1 huggingface-hub[inference]==0.26.2
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# llama-index-embeddings-huggingface # llama-index-embeddings-huggingface
# sentence-transformers # sentence-transformers
@ -91,20 +111,24 @@ huggingface-hub[inference]==0.26.1
# transformers # transformers
idna==3.10 idna==3.10
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# anyio # anyio
# httpx # httpx
# requests # requests
# yarl # yarl
jinja2==3.1.4 jinja2==3.1.4
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# torch # torch
joblib==1.4.2 joblib==1.4.2
# via # via
# nltk # nltk
# scikit-learn # scikit-learn
llama-index-core==0.11.20 llama-index-core==0.11.21
# via # via
# -r requirements/requirements-help.in # -r requirements/requirements-help.in
# llama-index-embeddings-huggingface # llama-index-embeddings-huggingface
@ -112,7 +136,9 @@ llama-index-embeddings-huggingface==0.3.1
# via -r requirements/requirements-help.in # via -r requirements/requirements-help.in
markupsafe==3.0.2 markupsafe==3.0.2
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# jinja2 # jinja2
marshmallow==3.23.0 marshmallow==3.23.0
# via dataclasses-json # via dataclasses-json
@ -120,6 +146,7 @@ mpmath==1.3.0
# via sympy # via sympy
multidict==6.1.0 multidict==6.1.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# aiohttp # aiohttp
# yarl # yarl
@ -129,6 +156,7 @@ nest-asyncio==1.6.0
# via llama-index-core # via llama-index-core
networkx==3.2.1 networkx==3.2.1
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# llama-index-core # llama-index-core
# torch # torch
@ -136,49 +164,63 @@ nltk==3.9.1
# via llama-index-core # via llama-index-core
numpy==1.26.4 numpy==1.26.4
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# llama-index-core # llama-index-core
# scikit-learn # scikit-learn
# scipy # scipy
# transformers # transformers
packaging==24.1 packaging==24.1
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# huggingface-hub # huggingface-hub
# marshmallow # marshmallow
# transformers # transformers
pillow==11.0.0 pillow==10.4.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# llama-index-core # llama-index-core
# sentence-transformers # sentence-transformers
propcache==0.2.0 propcache==0.2.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# yarl # yarl
pydantic==2.9.2 pydantic==2.9.2
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# llama-index-core # llama-index-core
pydantic-core==2.23.4 pydantic-core==2.23.4
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# pydantic # pydantic
pyyaml==6.0.2 pyyaml==6.0.2
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# huggingface-hub # huggingface-hub
# llama-index-core # llama-index-core
# transformers # transformers
regex==2024.9.11 regex==2024.9.11
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# nltk # nltk
# tiktoken # tiktoken
# transformers # transformers
requests==2.32.3 requests==2.32.3
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# huggingface-hub # huggingface-hub
# llama-index-core # llama-index-core
# tiktoken # tiktoken
@ -189,6 +231,7 @@ scikit-learn==1.5.2
# via sentence-transformers # via sentence-transformers
scipy==1.13.1 scipy==1.13.1
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# scikit-learn # scikit-learn
# sentence-transformers # sentence-transformers
@ -196,6 +239,7 @@ sentence-transformers==3.2.1
# via llama-index-embeddings-huggingface # via llama-index-embeddings-huggingface
sniffio==1.3.1 sniffio==1.3.1
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# anyio # anyio
# httpx # httpx
@ -211,16 +255,19 @@ threadpoolctl==3.5.0
# via scikit-learn # via scikit-learn
tiktoken==0.8.0 tiktoken==0.8.0
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# llama-index-core # llama-index-core
tokenizers==0.19.1 tokenizers==0.19.1
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# transformers # transformers
torch==2.2.2 torch==2.2.2
# via sentence-transformers # via sentence-transformers
tqdm==4.66.5 tqdm==4.66.6
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# huggingface-hub # huggingface-hub
# llama-index-core # llama-index-core
@ -231,7 +278,9 @@ transformers==4.44.2
# via sentence-transformers # via sentence-transformers
typing-extensions==4.12.2 typing-extensions==4.12.2
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# huggingface-hub # huggingface-hub
# llama-index-core # llama-index-core
# pydantic # pydantic
@ -245,13 +294,16 @@ typing-inspect==0.9.0
# llama-index-core # llama-index-core
urllib3==2.2.3 urllib3==2.2.3
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-dev.txt
# requests # requests
wrapt==1.16.0 wrapt==1.16.0
# via # via
# deprecated # deprecated
# llama-index-core # llama-index-core
yarl==1.16.0 yarl==1.17.1
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# aiohttp # aiohttp

View file

@ -2,10 +2,11 @@
# This file is autogenerated by pip-compile with Python 3.12 # This file is autogenerated by pip-compile with Python 3.12
# by the following command: # by the following command:
# #
# pip-compile --output-file=requirements/requirements-playwright.txt requirements/requirements-playwright.in # pip-compile --constraint=requirements.txt --constraint=requirements/requirements-browser.txt --constraint=requirements/requirements-dev.txt --constraint=requirements/requirements-help.txt --output-file=requirements/requirements-playwright.txt requirements/requirements-playwright.in
# #
greenlet==3.0.3 greenlet==3.0.3
# via # via
# -c requirements/requirements-help.txt
# -r requirements/requirements-playwright.in # -r requirements/requirements-playwright.in
# playwright # playwright
playwright==1.47.0 playwright==1.47.0
@ -14,5 +15,9 @@ pyee==12.0.0
# via playwright # via playwright
typing-extensions==4.12.2 typing-extensions==4.12.2
# via # via
# -c requirements.txt
# -c requirements/../requirements.txt # -c requirements/../requirements.txt
# -c requirements/requirements-browser.txt
# -c requirements/requirements-dev.txt
# -c requirements/requirements-help.txt
# pyee # pyee

View file

@ -17,7 +17,6 @@ sounddevice
soundfile soundfile
beautifulsoup4 beautifulsoup4
PyYAML PyYAML
Pillow
diff-match-patch diff-match-patch
pypandoc pypandoc
litellm litellm
@ -57,3 +56,6 @@ numpy<2
# Going past this makes dependencies unresolvable # Going past this makes dependencies unresolvable
# Seems to be caused by sentence-transformers # Seems to be caused by sentence-transformers
tokenizers==0.19.1 tokenizers==0.19.1
# streamlit 1.39.0 depends on this, as far back as 1.22 which is ancient and doesn't have chat ui
Pillow<11

View file

@ -3,16 +3,23 @@
# exit when any command fails # exit when any command fails
set -e set -e
# First compile the base requirements
pip-compile \ pip-compile \
requirements/requirements.in \ requirements/requirements.in \
--output-file=requirements.txt \ --output-file=requirements.txt \
$1 $1
for SUFFIX in dev help browser playwright; do # Then compile each additional requirements file in sequence
SUFFIXES=(dev help browser playwright)
CONSTRAINTS="--constraint=requirements.txt"
for SUFFIX in "${SUFFIXES[@]}"; do
pip-compile \ pip-compile \
requirements/requirements-${SUFFIX}.in \ requirements/requirements-${SUFFIX}.in \
--output-file=requirements/requirements-${SUFFIX}.txt \ --output-file=requirements/requirements-${SUFFIX}.txt \
${CONSTRAINTS} \
$1 $1
done
# Add this file as a constraint for the next iteration
CONSTRAINTS+=" --constraint=requirements/requirements-${SUFFIX}.txt"
done

View file

@ -875,6 +875,34 @@ class TestCommands(TestCase):
os.unlink(external_file1_path) os.unlink(external_file1_path)
os.unlink(external_file2_path) os.unlink(external_file2_path)
def test_cmd_read_only_with_image_file(self):
with GitTemporaryDirectory() as repo_dir:
io = InputOutput(pretty=False, fancy_input=False, yes=False)
coder = Coder.create(self.GPT35, None, io)
commands = Commands(io, coder)
# Create a test image file
test_file = Path(repo_dir) / "test_image.jpg"
test_file.write_text("Mock image content")
# Test with non-vision model
commands.cmd_read_only(str(test_file))
self.assertEqual(len(coder.abs_read_only_fnames), 0)
# Test with vision model
vision_model = Model("gpt-4-vision-preview")
vision_coder = Coder.create(vision_model, None, io)
vision_commands = Commands(io, vision_coder)
vision_commands.cmd_read_only(str(test_file))
self.assertEqual(len(vision_coder.abs_read_only_fnames), 1)
self.assertTrue(
any(
os.path.samefile(str(test_file), fname)
for fname in vision_coder.abs_read_only_fnames
)
)
def test_cmd_read_only_with_glob_pattern(self): def test_cmd_read_only_with_glob_pattern(self):
with GitTemporaryDirectory() as repo_dir: with GitTemporaryDirectory() as repo_dir:
io = InputOutput(pretty=False, fancy_input=False, yes=False) io = InputOutput(pretty=False, fancy_input=False, yes=False)