mirror of
https://github.com/Aider-AI/aider.git
synced 2025-06-01 02:05:00 +00:00
Merge branch 'main' into watch
This commit is contained in:
commit
d4a88d08e4
21 changed files with 521 additions and 289 deletions
|
@ -1,6 +1,6 @@
|
||||||
try:
|
try:
|
||||||
from aider.__version__ import __version__
|
from aider.__version__ import __version__
|
||||||
except Exception:
|
except Exception:
|
||||||
__version__ = "0.62.1.dev"
|
__version__ = "0.62.2.dev"
|
||||||
|
|
||||||
__all__ = [__version__]
|
__all__ = [__version__]
|
||||||
|
|
|
@ -13,7 +13,6 @@ import sys
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
import webbrowser
|
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from json.decoder import JSONDecodeError
|
from json.decoder import JSONDecodeError
|
||||||
|
@ -23,6 +22,7 @@ from typing import List
|
||||||
from aider import __version__, models, prompts, urls, utils
|
from aider import __version__, models, prompts, urls, utils
|
||||||
from aider.analytics import Analytics
|
from aider.analytics import Analytics
|
||||||
from aider.commands import Commands
|
from aider.commands import Commands
|
||||||
|
from aider.exceptions import LiteLLMExceptions
|
||||||
from aider.history import ChatSummary
|
from aider.history import ChatSummary
|
||||||
from aider.io import ConfirmGroup, InputOutput
|
from aider.io import ConfirmGroup, InputOutput
|
||||||
from aider.linter import Linter
|
from aider.linter import Linter
|
||||||
|
@ -30,7 +30,7 @@ from aider.llm import litellm
|
||||||
from aider.repo import ANY_GIT_ERROR, GitRepo
|
from aider.repo import ANY_GIT_ERROR, GitRepo
|
||||||
from aider.repomap import RepoMap
|
from aider.repomap import RepoMap
|
||||||
from aider.run_cmd import run_cmd
|
from aider.run_cmd import run_cmd
|
||||||
from aider.sendchat import RETRY_TIMEOUT, retry_exceptions, send_completion
|
from aider.sendchat import RETRY_TIMEOUT, send_completion
|
||||||
from aider.utils import format_content, format_messages, format_tokens, is_image_file
|
from aider.utils import format_content, format_messages, format_tokens, is_image_file
|
||||||
|
|
||||||
from ..dump import dump # noqa: F401
|
from ..dump import dump # noqa: F401
|
||||||
|
@ -790,34 +790,9 @@ class Coder:
|
||||||
self.num_reflections += 1
|
self.num_reflections += 1
|
||||||
message = self.reflected_message
|
message = self.reflected_message
|
||||||
|
|
||||||
def check_and_open_urls(self, exc: Exception) -> List[str]:
|
def check_and_open_urls(self, exc, friendly_msg=None):
|
||||||
import openai
|
|
||||||
|
|
||||||
"""Check exception for URLs, offer to open in a browser, with user-friendly error msgs."""
|
"""Check exception for URLs, offer to open in a browser, with user-friendly error msgs."""
|
||||||
text = str(exc)
|
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:
|
if friendly_msg:
|
||||||
self.io.tool_warning(text)
|
self.io.tool_warning(text)
|
||||||
|
@ -829,8 +804,7 @@ class Coder:
|
||||||
urls = list(set(url_pattern.findall(text))) # Use set to remove duplicates
|
urls = list(set(url_pattern.findall(text))) # Use set to remove duplicates
|
||||||
for url in urls:
|
for url in urls:
|
||||||
url = url.rstrip(".',\"")
|
url = url.rstrip(".',\"")
|
||||||
if self.io.confirm_ask("Open URL for more info about this error?", subject=url):
|
self.io.offer_url(url)
|
||||||
webbrowser.open(url)
|
|
||||||
return urls
|
return urls
|
||||||
|
|
||||||
def check_for_urls(self, inp: str) -> List[str]:
|
def check_for_urls(self, inp: str) -> List[str]:
|
||||||
|
@ -1154,8 +1128,6 @@ class Coder:
|
||||||
return chunks
|
return chunks
|
||||||
|
|
||||||
def send_message(self, inp):
|
def send_message(self, inp):
|
||||||
import openai # for error codes below
|
|
||||||
|
|
||||||
self.cur_messages += [
|
self.cur_messages += [
|
||||||
dict(role="user", content=inp),
|
dict(role="user", content=inp),
|
||||||
]
|
]
|
||||||
|
@ -1175,6 +1147,8 @@ class Coder:
|
||||||
|
|
||||||
retry_delay = 0.125
|
retry_delay = 0.125
|
||||||
|
|
||||||
|
litellm_ex = LiteLLMExceptions()
|
||||||
|
|
||||||
self.usage_report = None
|
self.usage_report = None
|
||||||
exhausted = False
|
exhausted = False
|
||||||
interrupted = False
|
interrupted = False
|
||||||
|
@ -1183,30 +1157,37 @@ class Coder:
|
||||||
try:
|
try:
|
||||||
yield from self.send(messages, functions=self.functions)
|
yield from self.send(messages, functions=self.functions)
|
||||||
break
|
break
|
||||||
except retry_exceptions() as err:
|
except litellm_ex.exceptions_tuple() as err:
|
||||||
# Print the error and its base classes
|
ex_info = litellm_ex.get_ex_info(err)
|
||||||
# for cls in err.__class__.__mro__: dump(cls.__name__)
|
|
||||||
|
|
||||||
|
if ex_info.name == "ContextWindowExceededError":
|
||||||
|
exhausted = True
|
||||||
|
break
|
||||||
|
|
||||||
|
should_retry = ex_info.retry
|
||||||
|
if should_retry:
|
||||||
retry_delay *= 2
|
retry_delay *= 2
|
||||||
if retry_delay > RETRY_TIMEOUT:
|
if retry_delay > RETRY_TIMEOUT:
|
||||||
|
should_retry = False
|
||||||
|
|
||||||
|
if not should_retry:
|
||||||
self.mdstream = None
|
self.mdstream = None
|
||||||
self.check_and_open_urls(err)
|
self.check_and_open_urls(err, ex_info.description)
|
||||||
break
|
break
|
||||||
|
|
||||||
err_msg = str(err)
|
err_msg = str(err)
|
||||||
|
if ex_info.description:
|
||||||
|
self.io.tool_warning(err_msg)
|
||||||
|
self.io.tool_error(ex_info.description)
|
||||||
|
else:
|
||||||
self.io.tool_error(err_msg)
|
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
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
interrupted = True
|
interrupted = True
|
||||||
break
|
break
|
||||||
except litellm.ContextWindowExceededError:
|
|
||||||
# The input is overflowing the context window!
|
|
||||||
exhausted = True
|
|
||||||
break
|
|
||||||
except litellm.exceptions.BadRequestError as br_err:
|
|
||||||
self.io.tool_error(f"BadRequestError: {br_err}")
|
|
||||||
return
|
|
||||||
except FinishReasonLength:
|
except FinishReasonLength:
|
||||||
# We hit the output limit!
|
# We hit the output limit!
|
||||||
if not self.main_model.info.get("supports_assistant_prefill"):
|
if not self.main_model.info.get("supports_assistant_prefill"):
|
||||||
|
@ -1221,12 +1202,8 @@ class Coder:
|
||||||
messages.append(
|
messages.append(
|
||||||
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:
|
|
||||||
# for cls in err.__class__.__mro__: dump(cls.__name__)
|
|
||||||
self.mdstream = None
|
|
||||||
self.check_and_open_urls(err)
|
|
||||||
break
|
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
|
self.mdstream = None
|
||||||
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))
|
||||||
self.io.tool_error(str(err))
|
self.io.tool_error(str(err))
|
||||||
|
@ -1374,11 +1351,9 @@ class Coder:
|
||||||
res.append("- Use /clear to clear the chat history.")
|
res.append("- Use /clear to clear the chat history.")
|
||||||
res.append("- Break your code into smaller source files.")
|
res.append("- Break your code into smaller source files.")
|
||||||
|
|
||||||
res.append("")
|
|
||||||
res.append(f"For more info: {urls.token_limits}")
|
|
||||||
|
|
||||||
res = "".join([line + "\n" for line in res])
|
res = "".join([line + "\n" for line in res])
|
||||||
self.io.tool_error(res)
|
self.io.tool_error(res)
|
||||||
|
self.io.offer_url(urls.token_limits)
|
||||||
|
|
||||||
def lint_edited(self, fnames):
|
def lint_edited(self, fnames):
|
||||||
res = ""
|
res = ""
|
||||||
|
|
|
@ -52,7 +52,10 @@ class EditBlockCoder(Coder):
|
||||||
content = self.io.read_text(full_path)
|
content = self.io.read_text(full_path)
|
||||||
new_content = do_replace(full_path, content, original, updated, self.fence)
|
new_content = do_replace(full_path, content, original, updated, self.fence)
|
||||||
|
|
||||||
if not new_content:
|
# If the edit failed, and
|
||||||
|
# this is not a "create a new file" with an empty original...
|
||||||
|
# https://github.com/Aider-AI/aider/issues/2258
|
||||||
|
if not new_content and original.strip():
|
||||||
# try patching any of the other files in the chat
|
# try patching any of the other files in the chat
|
||||||
for full_path in self.abs_fnames:
|
for full_path in self.abs_fnames:
|
||||||
content = self.io.read_text(full_path)
|
content = self.io.read_text(full_path)
|
||||||
|
|
76
aider/exceptions.py
Normal file
76
aider/exceptions.py
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
from dataclasses import dataclass
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class ExInfo:
|
||||||
|
name: str
|
||||||
|
retry: bool
|
||||||
|
description: str
|
||||||
|
|
||||||
|
|
||||||
|
EXCEPTIONS = [
|
||||||
|
ExInfo("APIConnectionError", True, None),
|
||||||
|
ExInfo("APIError", True, None),
|
||||||
|
ExInfo("APIResponseValidationError", True, None),
|
||||||
|
ExInfo(
|
||||||
|
"AuthenticationError",
|
||||||
|
False,
|
||||||
|
"The API provider is not able to authenticate you. Check your API key.",
|
||||||
|
),
|
||||||
|
ExInfo("AzureOpenAIError", True, None),
|
||||||
|
ExInfo("BadRequestError", False, None),
|
||||||
|
ExInfo("BudgetExceededError", True, None),
|
||||||
|
ExInfo(
|
||||||
|
"ContentPolicyViolationError",
|
||||||
|
True,
|
||||||
|
"The API provider has refused the request due to a safety policy about the content.",
|
||||||
|
),
|
||||||
|
ExInfo("ContextWindowExceededError", False, None), # special case handled in base_coder
|
||||||
|
ExInfo("InternalServerError", True, "The API provider's servers are down or overloaded."),
|
||||||
|
ExInfo("InvalidRequestError", True, None),
|
||||||
|
ExInfo("JSONSchemaValidationError", True, None),
|
||||||
|
ExInfo("NotFoundError", False, None),
|
||||||
|
ExInfo("OpenAIError", True, None),
|
||||||
|
ExInfo(
|
||||||
|
"RateLimitError",
|
||||||
|
True,
|
||||||
|
"The API provider has rate limited you. Try again later or check your quotas.",
|
||||||
|
),
|
||||||
|
ExInfo("RouterRateLimitError", True, None),
|
||||||
|
ExInfo("ServiceUnavailableError", True, "The API provider's servers are down or overloaded."),
|
||||||
|
ExInfo("UnprocessableEntityError", True, None),
|
||||||
|
ExInfo("UnsupportedParamsError", True, None),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class LiteLLMExceptions:
|
||||||
|
exceptions = dict()
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self._load()
|
||||||
|
|
||||||
|
def _load(self, strict=False):
|
||||||
|
import litellm
|
||||||
|
|
||||||
|
for var in dir(litellm):
|
||||||
|
if not var.endswith("Error"):
|
||||||
|
continue
|
||||||
|
|
||||||
|
ex_info = None
|
||||||
|
for exi in EXCEPTIONS:
|
||||||
|
if var == exi.name:
|
||||||
|
ex_info = exi
|
||||||
|
break
|
||||||
|
|
||||||
|
if strict and not ex_info:
|
||||||
|
raise ValueError(f"{var} is in litellm but not in aider's exceptions list")
|
||||||
|
|
||||||
|
ex = getattr(litellm, var)
|
||||||
|
self.exceptions[ex] = ex_info
|
||||||
|
|
||||||
|
def exceptions_tuple(self):
|
||||||
|
return tuple(self.exceptions)
|
||||||
|
|
||||||
|
def get_ex_info(self, ex):
|
||||||
|
"""Return the ExInfo for a given exception instance"""
|
||||||
|
return self.exceptions.get(ex.__class__, ExInfo(None, None, None))
|
10
aider/io.py
10
aider/io.py
|
@ -1,6 +1,7 @@
|
||||||
import base64
|
import base64
|
||||||
import os
|
import os
|
||||||
import threading
|
import threading
|
||||||
|
import webbrowser
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
@ -532,6 +533,15 @@ class InputOutput:
|
||||||
hist = "\n" + content.strip() + "\n\n"
|
hist = "\n" + content.strip() + "\n\n"
|
||||||
self.append_chat_history(hist)
|
self.append_chat_history(hist)
|
||||||
|
|
||||||
|
def offer_url(self, url, prompt="Open URL for more info?"):
|
||||||
|
"""Offer to open a URL in the browser, returns True if opened."""
|
||||||
|
if url in self.never_prompts:
|
||||||
|
return False
|
||||||
|
if self.confirm_ask(prompt, subject=url, allow_never=True):
|
||||||
|
webbrowser.open(url)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def confirm_ask(
|
def confirm_ask(
|
||||||
self,
|
self,
|
||||||
question,
|
question,
|
||||||
|
|
|
@ -5,7 +5,6 @@ import re
|
||||||
import sys
|
import sys
|
||||||
import threading
|
import threading
|
||||||
import traceback
|
import traceback
|
||||||
import webbrowser
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import git
|
import git
|
||||||
|
@ -367,8 +366,7 @@ def sanity_check_repo(repo, io):
|
||||||
io.tool_error("Aider only works with git repos with version number 1 or 2.")
|
io.tool_error("Aider only works with git repos with version number 1 or 2.")
|
||||||
io.tool_output("You may be able to convert your repo: git update-index --index-version=2")
|
io.tool_output("You may be able to convert your repo: git update-index --index-version=2")
|
||||||
io.tool_output("Or run aider --no-git to proceed without using git.")
|
io.tool_output("Or run aider --no-git to proceed without using git.")
|
||||||
if io.confirm_ask("Open documentation url for more info?", subject=urls.git_index_version):
|
io.offer_url(urls.git_index_version, "Open documentation url for more info?")
|
||||||
webbrowser.open(urls.git_index_version)
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
io.tool_error("Unable to read git repository, it may be corrupt?")
|
io.tool_error("Unable to read git repository, it may be corrupt?")
|
||||||
|
@ -641,10 +639,7 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
|
||||||
io.tool_output("You can skip this check with --no-show-model-warnings")
|
io.tool_output("You can skip this check with --no-show-model-warnings")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if io.confirm_ask(
|
io.offer_url(urls.model_warnings, "Open documentation url for more info?")
|
||||||
"Open documentation url for more info?", subject=urls.model_warnings
|
|
||||||
):
|
|
||||||
webbrowser.open(urls.model_warnings)
|
|
||||||
io.tool_output()
|
io.tool_output()
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
return 1
|
return 1
|
||||||
|
@ -869,10 +864,7 @@ def check_and_load_imports(io, verbose=False):
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
io.tool_error(str(err))
|
io.tool_error(str(err))
|
||||||
io.tool_output("Error loading required imports. Did you install aider properly?")
|
io.tool_output("Error loading required imports. Did you install aider properly?")
|
||||||
if io.confirm_ask(
|
io.offer_url(urls.install_properly, "Open documentation url for more info?")
|
||||||
"Open documentation url for more info?", subject=urls.install_properly
|
|
||||||
):
|
|
||||||
webbrowser.open(urls.install_properly)
|
|
||||||
|
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
|
@ -234,24 +234,24 @@ MODEL_SETTINGS = [
|
||||||
ModelSettings(
|
ModelSettings(
|
||||||
"claude-3-opus-20240229",
|
"claude-3-opus-20240229",
|
||||||
"diff",
|
"diff",
|
||||||
weak_model_name="claude-3-haiku-20240307",
|
weak_model_name="claude-3-5-haiku-20241022",
|
||||||
use_repo_map=True,
|
use_repo_map=True,
|
||||||
),
|
),
|
||||||
ModelSettings(
|
ModelSettings(
|
||||||
"openrouter/anthropic/claude-3-opus",
|
"openrouter/anthropic/claude-3-opus",
|
||||||
"diff",
|
"diff",
|
||||||
weak_model_name="openrouter/anthropic/claude-3-haiku",
|
weak_model_name="openrouter/anthropic/claude-3-5-haiku",
|
||||||
use_repo_map=True,
|
use_repo_map=True,
|
||||||
),
|
),
|
||||||
ModelSettings(
|
ModelSettings(
|
||||||
"claude-3-sonnet-20240229",
|
"claude-3-sonnet-20240229",
|
||||||
"whole",
|
"whole",
|
||||||
weak_model_name="claude-3-haiku-20240307",
|
weak_model_name="claude-3-5-haiku-20241022",
|
||||||
),
|
),
|
||||||
ModelSettings(
|
ModelSettings(
|
||||||
"claude-3-5-sonnet-20240620",
|
"claude-3-5-sonnet-20240620",
|
||||||
"diff",
|
"diff",
|
||||||
weak_model_name="claude-3-haiku-20240307",
|
weak_model_name="claude-3-5-haiku-20241022",
|
||||||
editor_model_name="claude-3-5-sonnet-20240620",
|
editor_model_name="claude-3-5-sonnet-20240620",
|
||||||
editor_edit_format="editor-diff",
|
editor_edit_format="editor-diff",
|
||||||
use_repo_map=True,
|
use_repo_map=True,
|
||||||
|
@ -268,7 +268,7 @@ MODEL_SETTINGS = [
|
||||||
ModelSettings(
|
ModelSettings(
|
||||||
"anthropic/claude-3-5-sonnet-20240620",
|
"anthropic/claude-3-5-sonnet-20240620",
|
||||||
"diff",
|
"diff",
|
||||||
weak_model_name="anthropic/claude-3-haiku-20240307",
|
weak_model_name="anthropic/claude-3-5-haiku-20241022",
|
||||||
editor_model_name="anthropic/claude-3-5-sonnet-20240620",
|
editor_model_name="anthropic/claude-3-5-sonnet-20240620",
|
||||||
editor_edit_format="editor-diff",
|
editor_edit_format="editor-diff",
|
||||||
use_repo_map=True,
|
use_repo_map=True,
|
||||||
|
@ -285,7 +285,7 @@ MODEL_SETTINGS = [
|
||||||
ModelSettings(
|
ModelSettings(
|
||||||
"anthropic/claude-3-5-sonnet-20241022",
|
"anthropic/claude-3-5-sonnet-20241022",
|
||||||
"diff",
|
"diff",
|
||||||
weak_model_name="anthropic/claude-3-haiku-20240307",
|
weak_model_name="anthropic/claude-3-5-haiku-20241022",
|
||||||
editor_model_name="anthropic/claude-3-5-sonnet-20241022",
|
editor_model_name="anthropic/claude-3-5-sonnet-20241022",
|
||||||
editor_edit_format="editor-diff",
|
editor_edit_format="editor-diff",
|
||||||
use_repo_map=True,
|
use_repo_map=True,
|
||||||
|
@ -299,10 +299,27 @@ MODEL_SETTINGS = [
|
||||||
cache_control=True,
|
cache_control=True,
|
||||||
reminder="user",
|
reminder="user",
|
||||||
),
|
),
|
||||||
|
ModelSettings(
|
||||||
|
"bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0",
|
||||||
|
"diff",
|
||||||
|
weak_model_name="bedrock/anthropic.claude-3-5-haiku-20241022-v1:0",
|
||||||
|
editor_model_name="bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0",
|
||||||
|
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(
|
||||||
"anthropic/claude-3-5-sonnet-latest",
|
"anthropic/claude-3-5-sonnet-latest",
|
||||||
"diff",
|
"diff",
|
||||||
weak_model_name="anthropic/claude-3-haiku-20240307",
|
weak_model_name="anthropic/claude-3-5-haiku-20241022",
|
||||||
editor_model_name="anthropic/claude-3-5-sonnet-20241022",
|
editor_model_name="anthropic/claude-3-5-sonnet-20241022",
|
||||||
editor_edit_format="editor-diff",
|
editor_edit_format="editor-diff",
|
||||||
use_repo_map=True,
|
use_repo_map=True,
|
||||||
|
@ -319,7 +336,7 @@ MODEL_SETTINGS = [
|
||||||
ModelSettings(
|
ModelSettings(
|
||||||
"claude-3-5-sonnet-20241022",
|
"claude-3-5-sonnet-20241022",
|
||||||
"diff",
|
"diff",
|
||||||
weak_model_name="claude-3-haiku-20240307",
|
weak_model_name="claude-3-5-haiku-20241022",
|
||||||
editor_model_name="claude-3-5-sonnet-20241022",
|
editor_model_name="claude-3-5-sonnet-20241022",
|
||||||
editor_edit_format="editor-diff",
|
editor_edit_format="editor-diff",
|
||||||
use_repo_map=True,
|
use_repo_map=True,
|
||||||
|
@ -349,6 +366,19 @@ MODEL_SETTINGS = [
|
||||||
"anthropic/claude-3-5-haiku-20241022",
|
"anthropic/claude-3-5-haiku-20241022",
|
||||||
"diff",
|
"diff",
|
||||||
weak_model_name="anthropic/claude-3-5-haiku-20241022",
|
weak_model_name="anthropic/claude-3-5-haiku-20241022",
|
||||||
|
use_repo_map=True,
|
||||||
|
extra_params={
|
||||||
|
"extra_headers": {
|
||||||
|
"anthropic-beta": ANTHROPIC_BETA_HEADER,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
cache_control=True,
|
||||||
|
),
|
||||||
|
ModelSettings(
|
||||||
|
"bedrock/anthropic.claude-3-5-haiku-20241022-v1:0",
|
||||||
|
"diff",
|
||||||
|
weak_model_name="bedrock/anthropic.claude-3-5-haiku-20241022-v1:0",
|
||||||
|
use_repo_map=True,
|
||||||
extra_params={
|
extra_params={
|
||||||
"extra_headers": {
|
"extra_headers": {
|
||||||
"anthropic-beta": ANTHROPIC_BETA_HEADER,
|
"anthropic-beta": ANTHROPIC_BETA_HEADER,
|
||||||
|
@ -360,6 +390,7 @@ MODEL_SETTINGS = [
|
||||||
"claude-3-5-haiku-20241022",
|
"claude-3-5-haiku-20241022",
|
||||||
"diff",
|
"diff",
|
||||||
weak_model_name="claude-3-5-haiku-20241022",
|
weak_model_name="claude-3-5-haiku-20241022",
|
||||||
|
use_repo_map=True,
|
||||||
examples_as_sys_msg=True,
|
examples_as_sys_msg=True,
|
||||||
extra_params={
|
extra_params={
|
||||||
"extra_headers": {
|
"extra_headers": {
|
||||||
|
@ -372,28 +403,11 @@ MODEL_SETTINGS = [
|
||||||
"vertex_ai/claude-3-5-haiku@20241022",
|
"vertex_ai/claude-3-5-haiku@20241022",
|
||||||
"diff",
|
"diff",
|
||||||
weak_model_name="vertex_ai/claude-3-5-haiku@20241022",
|
weak_model_name="vertex_ai/claude-3-5-haiku@20241022",
|
||||||
|
use_repo_map=True,
|
||||||
extra_params={
|
extra_params={
|
||||||
"max_tokens": 4096,
|
"max_tokens": 4096,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
ModelSettings(
|
|
||||||
"openrouter/anthropic/claude-3.5-haiku",
|
|
||||||
"diff",
|
|
||||||
weak_model_name="openrouter/anthropic/claude-3.5-haiku",
|
|
||||||
extra_params={
|
|
||||||
"max_tokens": 4096,
|
|
||||||
},
|
|
||||||
cache_control=True,
|
|
||||||
),
|
|
||||||
ModelSettings(
|
|
||||||
"openrouter/anthropic/claude-3.5-haiku:beta",
|
|
||||||
"diff",
|
|
||||||
weak_model_name="openrouter/anthropic/claude-3.5-haiku:beta",
|
|
||||||
extra_params={
|
|
||||||
"max_tokens": 4096,
|
|
||||||
},
|
|
||||||
cache_control=True,
|
|
||||||
),
|
|
||||||
ModelSettings(
|
ModelSettings(
|
||||||
"claude-3-haiku-20240307",
|
"claude-3-haiku-20240307",
|
||||||
"whole",
|
"whole",
|
||||||
|
@ -409,7 +423,7 @@ MODEL_SETTINGS = [
|
||||||
ModelSettings(
|
ModelSettings(
|
||||||
"openrouter/anthropic/claude-3.5-sonnet",
|
"openrouter/anthropic/claude-3.5-sonnet",
|
||||||
"diff",
|
"diff",
|
||||||
weak_model_name="openrouter/anthropic/claude-3-haiku",
|
weak_model_name="openrouter/anthropic/claude-3-5-haiku",
|
||||||
editor_model_name="openrouter/anthropic/claude-3.5-sonnet",
|
editor_model_name="openrouter/anthropic/claude-3.5-sonnet",
|
||||||
editor_edit_format="editor-diff",
|
editor_edit_format="editor-diff",
|
||||||
use_repo_map=True,
|
use_repo_map=True,
|
||||||
|
@ -423,7 +437,7 @@ MODEL_SETTINGS = [
|
||||||
ModelSettings(
|
ModelSettings(
|
||||||
"openrouter/anthropic/claude-3.5-sonnet:beta",
|
"openrouter/anthropic/claude-3.5-sonnet:beta",
|
||||||
"diff",
|
"diff",
|
||||||
weak_model_name="openrouter/anthropic/claude-3-haiku:beta",
|
weak_model_name="openrouter/anthropic/claude-3-5-haiku:beta",
|
||||||
editor_model_name="openrouter/anthropic/claude-3.5-sonnet:beta",
|
editor_model_name="openrouter/anthropic/claude-3.5-sonnet:beta",
|
||||||
editor_edit_format="editor-diff",
|
editor_edit_format="editor-diff",
|
||||||
use_repo_map=True,
|
use_repo_map=True,
|
||||||
|
@ -439,7 +453,7 @@ MODEL_SETTINGS = [
|
||||||
ModelSettings(
|
ModelSettings(
|
||||||
"vertex_ai/claude-3-5-sonnet@20240620",
|
"vertex_ai/claude-3-5-sonnet@20240620",
|
||||||
"diff",
|
"diff",
|
||||||
weak_model_name="vertex_ai/claude-3-haiku@20240307",
|
weak_model_name="vertex_ai/claude-3-5-haiku@20241022",
|
||||||
editor_model_name="vertex_ai/claude-3-5-sonnet@20240620",
|
editor_model_name="vertex_ai/claude-3-5-sonnet@20240620",
|
||||||
editor_edit_format="editor-diff",
|
editor_edit_format="editor-diff",
|
||||||
use_repo_map=True,
|
use_repo_map=True,
|
||||||
|
@ -452,7 +466,7 @@ MODEL_SETTINGS = [
|
||||||
ModelSettings(
|
ModelSettings(
|
||||||
"vertex_ai/claude-3-5-sonnet-v2@20241022",
|
"vertex_ai/claude-3-5-sonnet-v2@20241022",
|
||||||
"diff",
|
"diff",
|
||||||
weak_model_name="vertex_ai/claude-3-haiku@20240307",
|
weak_model_name="vertex_ai/claude-3-5-haiku@20241022",
|
||||||
editor_model_name="vertex_ai/claude-3-5-sonnet-v2@20241022",
|
editor_model_name="vertex_ai/claude-3-5-sonnet-v2@20241022",
|
||||||
editor_edit_format="editor-diff",
|
editor_edit_format="editor-diff",
|
||||||
use_repo_map=True,
|
use_repo_map=True,
|
||||||
|
@ -465,13 +479,13 @@ MODEL_SETTINGS = [
|
||||||
ModelSettings(
|
ModelSettings(
|
||||||
"vertex_ai/claude-3-opus@20240229",
|
"vertex_ai/claude-3-opus@20240229",
|
||||||
"diff",
|
"diff",
|
||||||
weak_model_name="vertex_ai/claude-3-haiku@20240307",
|
weak_model_name="vertex_ai/claude-3-5-haiku@20241022",
|
||||||
use_repo_map=True,
|
use_repo_map=True,
|
||||||
),
|
),
|
||||||
ModelSettings(
|
ModelSettings(
|
||||||
"vertex_ai/claude-3-sonnet@20240229",
|
"vertex_ai/claude-3-sonnet@20240229",
|
||||||
"whole",
|
"whole",
|
||||||
weak_model_name="vertex_ai/claude-3-haiku@20240307",
|
weak_model_name="vertex_ai/claude-3-5-haiku@20241022",
|
||||||
),
|
),
|
||||||
# Cohere
|
# Cohere
|
||||||
ModelSettings(
|
ModelSettings(
|
||||||
|
|
|
@ -28,7 +28,7 @@ from tree_sitter_languages import get_language, get_parser # noqa: E402
|
||||||
Tag = namedtuple("Tag", "rel_fname fname line name kind".split())
|
Tag = namedtuple("Tag", "rel_fname fname line name kind".split())
|
||||||
|
|
||||||
|
|
||||||
SQLITE_ERRORS = (sqlite3.OperationalError, sqlite3.DatabaseError)
|
SQLITE_ERRORS = (sqlite3.OperationalError, sqlite3.DatabaseError, OSError)
|
||||||
|
|
||||||
|
|
||||||
class RepoMap:
|
class RepoMap:
|
||||||
|
@ -197,7 +197,7 @@ class RepoMap:
|
||||||
self.TAGS_CACHE = new_cache
|
self.TAGS_CACHE = new_cache
|
||||||
return
|
return
|
||||||
|
|
||||||
except (SQLITE_ERRORS, OSError) as e:
|
except SQLITE_ERRORS as e:
|
||||||
# If anything goes wrong, warn and fall back to dict
|
# If anything goes wrong, warn and fall back to dict
|
||||||
self.io.tool_warning(
|
self.io.tool_warning(
|
||||||
f"Unable to use tags cache at {path}, falling back to memory cache"
|
f"Unable to use tags cache at {path}, falling back to memory cache"
|
||||||
|
@ -368,6 +368,8 @@ class RepoMap:
|
||||||
showing_bar = False
|
showing_bar = False
|
||||||
|
|
||||||
for fname in fnames:
|
for fname in fnames:
|
||||||
|
if self.verbose:
|
||||||
|
self.io.tool_output(f"Processing {fname}")
|
||||||
if progress and not showing_bar:
|
if progress and not showing_bar:
|
||||||
progress()
|
progress()
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,8 @@ import hashlib
|
||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
|
|
||||||
import backoff
|
|
||||||
|
|
||||||
from aider.dump import dump # noqa: F401
|
from aider.dump import dump # noqa: F401
|
||||||
|
from aider.exceptions import LiteLLMExceptions
|
||||||
from aider.llm import litellm
|
from aider.llm import litellm
|
||||||
|
|
||||||
# from diskcache import Cache
|
# from diskcache import Cache
|
||||||
|
@ -17,52 +16,6 @@ CACHE = None
|
||||||
RETRY_TIMEOUT = 60
|
RETRY_TIMEOUT = 60
|
||||||
|
|
||||||
|
|
||||||
def retry_exceptions():
|
|
||||||
import httpx
|
|
||||||
import openai
|
|
||||||
|
|
||||||
return (
|
|
||||||
# httpx
|
|
||||||
httpx.ConnectError,
|
|
||||||
httpx.RemoteProtocolError,
|
|
||||||
httpx.ReadTimeout,
|
|
||||||
#
|
|
||||||
# litellm exceptions inherit from openai exceptions
|
|
||||||
# https://docs.litellm.ai/docs/exception_mapping
|
|
||||||
#
|
|
||||||
# openai.BadRequestError,
|
|
||||||
# litellm.ContextWindowExceededError,
|
|
||||||
# litellm.ContentPolicyViolationError,
|
|
||||||
#
|
|
||||||
# openai.AuthenticationError,
|
|
||||||
# openai.PermissionDeniedError,
|
|
||||||
# openai.NotFoundError,
|
|
||||||
#
|
|
||||||
openai.APITimeoutError,
|
|
||||||
openai.UnprocessableEntityError,
|
|
||||||
openai.RateLimitError,
|
|
||||||
openai.APIConnectionError,
|
|
||||||
# openai.APIError,
|
|
||||||
# openai.APIStatusError,
|
|
||||||
openai.InternalServerError,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def lazy_litellm_retry_decorator(func):
|
|
||||||
def wrapper(*args, **kwargs):
|
|
||||||
decorated_func = backoff.on_exception(
|
|
||||||
backoff.expo,
|
|
||||||
retry_exceptions(),
|
|
||||||
max_time=RETRY_TIMEOUT,
|
|
||||||
on_backoff=lambda details: print(
|
|
||||||
f"{details.get('exception', 'Exception')}\nRetry in {details['wait']:.1f} seconds."
|
|
||||||
),
|
|
||||||
)(func)
|
|
||||||
return decorated_func(*args, **kwargs)
|
|
||||||
|
|
||||||
return wrapper
|
|
||||||
|
|
||||||
|
|
||||||
def send_completion(
|
def send_completion(
|
||||||
model_name,
|
model_name,
|
||||||
messages,
|
messages,
|
||||||
|
@ -104,6 +57,8 @@ def send_completion(
|
||||||
|
|
||||||
|
|
||||||
def simple_send_with_retries(model_name, messages, extra_params=None):
|
def simple_send_with_retries(model_name, messages, extra_params=None):
|
||||||
|
litellm_ex = LiteLLMExceptions()
|
||||||
|
|
||||||
retry_delay = 0.125
|
retry_delay = 0.125
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
|
@ -117,11 +72,22 @@ def simple_send_with_retries(model_name, messages, extra_params=None):
|
||||||
|
|
||||||
_hash, response = send_completion(**kwargs)
|
_hash, response = send_completion(**kwargs)
|
||||||
return response.choices[0].message.content
|
return response.choices[0].message.content
|
||||||
except retry_exceptions() as err:
|
except litellm_ex.exceptions_tuple() as err:
|
||||||
|
ex_info = litellm_ex.get_ex_info(err)
|
||||||
|
|
||||||
print(str(err))
|
print(str(err))
|
||||||
|
if ex_info.description:
|
||||||
|
print(ex_info.description)
|
||||||
|
|
||||||
|
should_retry = ex_info.retry
|
||||||
|
if should_retry:
|
||||||
retry_delay *= 2
|
retry_delay *= 2
|
||||||
if retry_delay > RETRY_TIMEOUT:
|
if retry_delay > RETRY_TIMEOUT:
|
||||||
|
should_retry = False
|
||||||
|
|
||||||
|
if not should_retry:
|
||||||
break
|
break
|
||||||
|
|
||||||
print(f"Retrying in {retry_delay:.1f} seconds...")
|
print(f"Retrying in {retry_delay:.1f} seconds...")
|
||||||
time.sleep(retry_delay)
|
time.sleep(retry_delay)
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -1634,3 +1634,26 @@
|
||||||
versions: 0.61.1.dev
|
versions: 0.61.1.dev
|
||||||
seconds_per_case: 18.4
|
seconds_per_case: 18.4
|
||||||
total_cost: 0.0000
|
total_cost: 0.0000
|
||||||
|
|
||||||
|
- dirname: 2024-11-07-06-15-36--Qwen2.5.1-Coder-7B-Instruct-GGUF:Q8_0-32k-whole
|
||||||
|
test_cases: 133
|
||||||
|
model: ollama/Qwen2.5.1-Coder-7B-Instruct-GGUF:Q8_0-32k
|
||||||
|
edit_format: whole
|
||||||
|
commit_hash: e76704e
|
||||||
|
pass_rate_1: 52.6
|
||||||
|
pass_rate_2: 63.9
|
||||||
|
percent_cases_well_formed: 100.0
|
||||||
|
error_outputs: 0
|
||||||
|
num_malformed_responses: 0
|
||||||
|
num_with_malformed_responses: 0
|
||||||
|
user_asks: 4
|
||||||
|
lazy_comments: 0
|
||||||
|
syntax_errors: 0
|
||||||
|
indentation_errors: 0
|
||||||
|
exhausted_context_windows: 0
|
||||||
|
test_timeouts: 1
|
||||||
|
command: aider --model ollama/Qwen2.5.1-Coder-7B-Instruct-GGUF:Q8_0-32k
|
||||||
|
date: 2024-11-07
|
||||||
|
versions: 0.59.2.dev
|
||||||
|
seconds_per_case: 18.2
|
||||||
|
total_cost: 0.0000
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<canvas id="linesChart" width="800" height="360" style="margin-top: 20px"></canvas>
|
|
||||||
<canvas id="blameChart" width="800" height="360" style="margin-top: 20px"></canvas>
|
<canvas id="blameChart" width="800" height="360" style="margin-top: 20px"></canvas>
|
||||||
|
<canvas id="linesChart" width="800" height="360" style="margin-top: 20px"></canvas>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/moment"></script>
|
<script src="https://cdn.jsdelivr.net/npm/moment"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-moment"></script>
|
<script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-moment"></script>
|
||||||
|
|
|
@ -483,3 +483,138 @@
|
||||||
{"event": "cli session", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730754176}
|
{"event": "cli session", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730754176}
|
||||||
{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 593, "completion_tokens": 53, "total_tokens": 646, "cost": 0.000858, "total_cost": 0.000858, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730754179}
|
{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 593, "completion_tokens": 53, "total_tokens": 646, "cost": 0.000858, "total_cost": 0.000858, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730754179}
|
||||||
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730818364}
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730818364}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730818452}
|
||||||
|
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730818452}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730818654}
|
||||||
|
{"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.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730818656}
|
||||||
|
{"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": 4733, "completion_tokens": 745, "total_tokens": 5478, "cost": 0.025374, "total_cost": 0.025374, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730818718}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.61.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730818841}
|
||||||
|
{"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.61.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730818842}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730818882}
|
||||||
|
{"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.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730818884}
|
||||||
|
{"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": 4657, "completion_tokens": 83, "total_tokens": 4740, "cost": 0.015216, "total_cost": 0.015216, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730818900}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730818904}
|
||||||
|
{"event": "command_clear", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730818907}
|
||||||
|
{"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": 5113, "completion_tokens": 1484, "total_tokens": 6597, "cost": 0.037599, "total_cost": 0.052815, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730818940}
|
||||||
|
{"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": 6654, "completion_tokens": 435, "total_tokens": 7089, "cost": 0.026487, "total_cost": 0.079302, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730819050}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825144}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825234}
|
||||||
|
{"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.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825235}
|
||||||
|
{"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": 23, "total_tokens": 697, "cost": 0.00011489999999999999, "total_cost": 0.00011489999999999999, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825238}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825250}
|
||||||
|
{"event": "cli session", "properties": {"main_model": "None", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "None", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825252}
|
||||||
|
{"event": "message_send", "properties": {"main_model": "None", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "None", "edit_format": "diff", "prompt_tokens": 2185, "completion_tokens": 56, "total_tokens": 2241, "cost": 0.0024649999999999997, "total_cost": 0.0024649999999999997, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825255}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825273}
|
||||||
|
{"event": "cli session", "properties": {"main_model": "None", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "None", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825275}
|
||||||
|
{"event": "message_send", "properties": {"main_model": "None", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "None", "edit_format": "diff", "prompt_tokens": 4601, "completion_tokens": 0, "total_tokens": 4601, "cost": 0.004601, "total_cost": 0.004601, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825277}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825280}
|
||||||
|
{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825329}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825344}
|
||||||
|
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825345}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825356}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825371}
|
||||||
|
{"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": 12023, "completion_tokens": 494, "total_tokens": 12517, "cost": 0.043479000000000004, "total_cost": 0.122781, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825392}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825584}
|
||||||
|
{"event": "model warning", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "openrouter/REDACTED", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825586}
|
||||||
|
{"event": "cli session", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "openrouter/REDACTED", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825588}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825603}
|
||||||
|
{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 406, "completion_tokens": 57, "total_tokens": 463, "cost": 0.000691, "total_cost": 0.000691, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825607}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825613}
|
||||||
|
{"event": "message_send", "properties": {"main_model": "openrouter/anthropic/claude-3.5-sonnet", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "openrouter/anthropic/claude-3.5-sonnet", "edit_format": "diff", "prompt_tokens": 4608, "completion_tokens": 52, "total_tokens": 4660, "cost": 0.014603999999999999, "total_cost": 0.014603999999999999, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825618}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825641}
|
||||||
|
{"event": "model warning", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "openrouter/REDACTED", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825643}
|
||||||
|
{"event": "message_send", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "openrouter/REDACTED", "edit_format": "whole", "prompt_tokens": 406, "completion_tokens": 79, "total_tokens": 485, "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.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825648}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825746}
|
||||||
|
{"event": "model warning", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "openrouter/REDACTED", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825748}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825774}
|
||||||
|
{"event": "model warning", "properties": {"main_model": "openrouter/REDACTED", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "openrouter/REDACTED", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730825775}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730826090}
|
||||||
|
{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730826167}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730826833}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730826902}
|
||||||
|
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730826902}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730835152}
|
||||||
|
{"event": "cli session", "properties": {"main_model": "deepseek/deepseek-coder", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "deepseek/deepseek-coder", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730835155}
|
||||||
|
{"event": "message_send", "properties": {"main_model": "deepseek/deepseek-coder", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "deepseek/deepseek-coder", "edit_format": "diff", "prompt_tokens": 4613, "completion_tokens": 147, "total_tokens": 4760, "cost": 0.0006869800000000001, "total_cost": 0.0006869800000000001, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730835165}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730835605}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730835621}
|
||||||
|
{"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": 7077, "completion_tokens": 131, "total_tokens": 7208, "cost": 0.023196, "total_cost": 0.145977, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730835629}
|
||||||
|
{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730835647}
|
||||||
|
{"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": 4650, "completion_tokens": 79, "total_tokens": 4729, "cost": 0.015135000000000001, "total_cost": 0.161112, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730835652}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730835659}
|
||||||
|
{"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": 7216, "completion_tokens": 202, "total_tokens": 7418, "cost": 0.024678000000000002, "total_cost": 0.18579, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730835666}
|
||||||
|
{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730835725}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730835729}
|
||||||
|
{"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": 7091, "completion_tokens": 179, "total_tokens": 7270, "cost": 0.023958, "total_cost": 0.20974800000000002, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730835748}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730835777}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730835846}
|
||||||
|
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730835846}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730836461}
|
||||||
|
{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730836569}
|
||||||
|
{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730836572}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730837470}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730837568}
|
||||||
|
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730837568}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730839181}
|
||||||
|
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730839182}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730839281}
|
||||||
|
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730839282}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730850606}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730850628}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730850671}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730952885}
|
||||||
|
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1730952886}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731003938}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731003955}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731003977}
|
||||||
|
{"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": 22688, "completion_tokens": 350, "total_tokens": 23038, "cost": 0.073314, "total_cost": 0.28306200000000004, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731003989}
|
||||||
|
{"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": 23909, "completion_tokens": 208, "total_tokens": 24117, "cost": 0.074847, "total_cost": 0.35790900000000003, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731004012}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731004099}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731004134}
|
||||||
|
{"event": "command_drop", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731004203}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731004216}
|
||||||
|
{"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": 11315, "completion_tokens": 297, "total_tokens": 11612, "cost": 0.038400000000000004, "total_cost": 0.396309, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731004236}
|
||||||
|
{"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": 11339, "completion_tokens": 84, "total_tokens": 11423, "cost": 0.035276999999999996, "total_cost": 0.431586, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007380}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007384}
|
||||||
|
{"event": "model warning", "properties": {"main_model": "None", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "None", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007387}
|
||||||
|
{"event": "cli session", "properties": {"main_model": "None", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "None", "edit_format": "whole", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007391}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007412}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007458}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007531}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007542}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007602}
|
||||||
|
{"event": "cli session", "properties": {"main_model": "gpt-4o-2024-08-06", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-2024-08-06", "edit_format": "diff", "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007604}
|
||||||
|
{"event": "message_send", "properties": {"main_model": "gpt-4o-2024-08-06", "weak_model": "claude-3-5-sonnet-20241022", "editor_model": "gpt-4o-2024-08-06", "edit_format": "diff", "prompt_tokens": 4630, "completion_tokens": 12, "total_tokens": 4642, "cost": 0.011695, "total_cost": 0.011695, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007609}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007614}
|
||||||
|
{"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.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007616}
|
||||||
|
{"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": 4637, "completion_tokens": 89, "total_tokens": 4726, "cost": 0.015246, "total_cost": 0.015246, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007620}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007631}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007654}
|
||||||
|
{"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.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007655}
|
||||||
|
{"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": 2175, "completion_tokens": 75, "total_tokens": 2250, "cost": 0.0076500000000000005, "total_cost": 0.0076500000000000005, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007660}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007674}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731007733}
|
||||||
|
{"event": "command_drop", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008017}
|
||||||
|
{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008018}
|
||||||
|
{"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": 4609, "completion_tokens": 118, "total_tokens": 4727, "cost": 0.015597000000000001, "total_cost": 0.44718300000000005, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008044}
|
||||||
|
{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008050}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008053}
|
||||||
|
{"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": 9093, "completion_tokens": 174, "total_tokens": 9267, "cost": 0.029889000000000002, "total_cost": 0.47707200000000005, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008063}
|
||||||
|
{"event": "command_ask", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008066}
|
||||||
|
{"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": 7163, "completion_tokens": 149, "total_tokens": 7312, "cost": 0.023724000000000002, "total_cost": 0.500796, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008071}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008091}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008122}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008124}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008125}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008135}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008162}
|
||||||
|
{"event": "cli session", "properties": {"main_model": "claude-3-5-sonnet-20241022", "weak_model": "claude-3-5-haiku-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.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008163}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008178}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008738}
|
||||||
|
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008738}
|
||||||
|
{"event": "command_reset", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008808}
|
||||||
|
{"event": "command_add", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008815}
|
||||||
|
{"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": 4879, "completion_tokens": 279, "total_tokens": 5158, "cost": 0.018822000000000002, "total_cost": 0.519618, "python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.1.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008851}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008891}
|
||||||
|
{"event": "launched", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008957}
|
||||||
|
{"event": "gui session", "properties": {"python_version": "3.12.6", "os_platform": "Darwin", "os_release": "23.6.0", "machine": "x86_64", "aider_version": "0.62.2.dev"}, "user_id": "c42c4e6b-f054-44d7-ae1f-6726cc41da88", "time": 1731008958}
|
||||||
|
|
|
@ -400,7 +400,7 @@ cog.out("```\n")
|
||||||
use_repo_map: true
|
use_repo_map: true
|
||||||
use_system_prompt: true
|
use_system_prompt: true
|
||||||
use_temperature: true
|
use_temperature: true
|
||||||
weak_model_name: claude-3-haiku-20240307
|
weak_model_name: claude-3-5-haiku-20241022
|
||||||
- cache_control: false
|
- cache_control: false
|
||||||
caches_by_default: false
|
caches_by_default: false
|
||||||
edit_format: diff
|
edit_format: diff
|
||||||
|
@ -416,7 +416,7 @@ cog.out("```\n")
|
||||||
use_repo_map: true
|
use_repo_map: true
|
||||||
use_system_prompt: true
|
use_system_prompt: true
|
||||||
use_temperature: true
|
use_temperature: true
|
||||||
weak_model_name: openrouter/anthropic/claude-3-haiku
|
weak_model_name: openrouter/anthropic/claude-3-5-haiku
|
||||||
- cache_control: false
|
- cache_control: false
|
||||||
caches_by_default: false
|
caches_by_default: false
|
||||||
edit_format: whole
|
edit_format: whole
|
||||||
|
@ -432,7 +432,7 @@ cog.out("```\n")
|
||||||
use_repo_map: false
|
use_repo_map: false
|
||||||
use_system_prompt: true
|
use_system_prompt: true
|
||||||
use_temperature: true
|
use_temperature: true
|
||||||
weak_model_name: claude-3-haiku-20240307
|
weak_model_name: claude-3-5-haiku-20241022
|
||||||
- cache_control: true
|
- cache_control: true
|
||||||
caches_by_default: false
|
caches_by_default: false
|
||||||
edit_format: diff
|
edit_format: diff
|
||||||
|
@ -451,7 +451,7 @@ cog.out("```\n")
|
||||||
use_repo_map: true
|
use_repo_map: true
|
||||||
use_system_prompt: true
|
use_system_prompt: true
|
||||||
use_temperature: true
|
use_temperature: true
|
||||||
weak_model_name: claude-3-haiku-20240307
|
weak_model_name: claude-3-5-haiku-20241022
|
||||||
- cache_control: true
|
- cache_control: true
|
||||||
caches_by_default: false
|
caches_by_default: false
|
||||||
edit_format: diff
|
edit_format: diff
|
||||||
|
@ -470,7 +470,7 @@ cog.out("```\n")
|
||||||
use_repo_map: true
|
use_repo_map: true
|
||||||
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-5-haiku-20241022
|
||||||
- cache_control: true
|
- cache_control: true
|
||||||
caches_by_default: false
|
caches_by_default: false
|
||||||
edit_format: diff
|
edit_format: diff
|
||||||
|
@ -489,7 +489,26 @@ cog.out("```\n")
|
||||||
use_repo_map: true
|
use_repo_map: true
|
||||||
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-5-haiku-20241022
|
||||||
|
- cache_control: true
|
||||||
|
caches_by_default: false
|
||||||
|
edit_format: diff
|
||||||
|
editor_edit_format: editor-diff
|
||||||
|
editor_model_name: bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0
|
||||||
|
examples_as_sys_msg: true
|
||||||
|
extra_params:
|
||||||
|
extra_headers:
|
||||||
|
anthropic-beta: prompt-caching-2024-07-31
|
||||||
|
max_tokens: 8192
|
||||||
|
lazy: false
|
||||||
|
name: bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0
|
||||||
|
reminder: user
|
||||||
|
send_undo_reply: false
|
||||||
|
streaming: true
|
||||||
|
use_repo_map: true
|
||||||
|
use_system_prompt: true
|
||||||
|
use_temperature: true
|
||||||
|
weak_model_name: bedrock/anthropic.claude-3-5-haiku-20241022-v1:0
|
||||||
- cache_control: true
|
- cache_control: true
|
||||||
caches_by_default: false
|
caches_by_default: false
|
||||||
edit_format: diff
|
edit_format: diff
|
||||||
|
@ -508,7 +527,7 @@ cog.out("```\n")
|
||||||
use_repo_map: true
|
use_repo_map: true
|
||||||
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-5-haiku-20241022
|
||||||
- cache_control: true
|
- cache_control: true
|
||||||
caches_by_default: false
|
caches_by_default: false
|
||||||
edit_format: diff
|
edit_format: diff
|
||||||
|
@ -527,7 +546,7 @@ cog.out("```\n")
|
||||||
use_repo_map: true
|
use_repo_map: true
|
||||||
use_system_prompt: true
|
use_system_prompt: true
|
||||||
use_temperature: true
|
use_temperature: true
|
||||||
weak_model_name: claude-3-haiku-20240307
|
weak_model_name: claude-3-5-haiku-20241022
|
||||||
- cache_control: true
|
- cache_control: true
|
||||||
caches_by_default: false
|
caches_by_default: false
|
||||||
edit_format: whole
|
edit_format: whole
|
||||||
|
@ -560,10 +579,28 @@ cog.out("```\n")
|
||||||
reminder: user
|
reminder: user
|
||||||
send_undo_reply: false
|
send_undo_reply: false
|
||||||
streaming: true
|
streaming: true
|
||||||
use_repo_map: false
|
use_repo_map: true
|
||||||
use_system_prompt: true
|
use_system_prompt: true
|
||||||
use_temperature: true
|
use_temperature: true
|
||||||
weak_model_name: anthropic/claude-3-5-haiku-20241022
|
weak_model_name: anthropic/claude-3-5-haiku-20241022
|
||||||
|
- cache_control: true
|
||||||
|
caches_by_default: false
|
||||||
|
edit_format: diff
|
||||||
|
editor_edit_format: null
|
||||||
|
editor_model_name: null
|
||||||
|
examples_as_sys_msg: false
|
||||||
|
extra_params:
|
||||||
|
extra_headers:
|
||||||
|
anthropic-beta: prompt-caching-2024-07-31
|
||||||
|
lazy: false
|
||||||
|
name: bedrock/anthropic.claude-3-5-haiku-20241022-v1:0
|
||||||
|
reminder: user
|
||||||
|
send_undo_reply: false
|
||||||
|
streaming: true
|
||||||
|
use_repo_map: true
|
||||||
|
use_system_prompt: true
|
||||||
|
use_temperature: true
|
||||||
|
weak_model_name: bedrock/anthropic.claude-3-5-haiku-20241022-v1:0
|
||||||
- cache_control: true
|
- cache_control: true
|
||||||
caches_by_default: false
|
caches_by_default: false
|
||||||
edit_format: diff
|
edit_format: diff
|
||||||
|
@ -578,7 +615,7 @@ cog.out("```\n")
|
||||||
reminder: user
|
reminder: user
|
||||||
send_undo_reply: false
|
send_undo_reply: false
|
||||||
streaming: true
|
streaming: true
|
||||||
use_repo_map: false
|
use_repo_map: true
|
||||||
use_system_prompt: true
|
use_system_prompt: true
|
||||||
use_temperature: true
|
use_temperature: true
|
||||||
weak_model_name: claude-3-5-haiku-20241022
|
weak_model_name: claude-3-5-haiku-20241022
|
||||||
|
@ -595,44 +632,10 @@ cog.out("```\n")
|
||||||
reminder: user
|
reminder: user
|
||||||
send_undo_reply: false
|
send_undo_reply: false
|
||||||
streaming: true
|
streaming: true
|
||||||
use_repo_map: false
|
use_repo_map: true
|
||||||
use_system_prompt: true
|
use_system_prompt: true
|
||||||
use_temperature: true
|
use_temperature: true
|
||||||
weak_model_name: vertex_ai/claude-3-5-haiku@20241022
|
weak_model_name: vertex_ai/claude-3-5-haiku@20241022
|
||||||
- cache_control: true
|
|
||||||
caches_by_default: false
|
|
||||||
edit_format: diff
|
|
||||||
editor_edit_format: null
|
|
||||||
editor_model_name: null
|
|
||||||
examples_as_sys_msg: false
|
|
||||||
extra_params:
|
|
||||||
max_tokens: 4096
|
|
||||||
lazy: false
|
|
||||||
name: openrouter/anthropic/claude-3.5-haiku
|
|
||||||
reminder: user
|
|
||||||
send_undo_reply: false
|
|
||||||
streaming: true
|
|
||||||
use_repo_map: false
|
|
||||||
use_system_prompt: true
|
|
||||||
use_temperature: true
|
|
||||||
weak_model_name: openrouter/anthropic/claude-3.5-haiku
|
|
||||||
- cache_control: true
|
|
||||||
caches_by_default: false
|
|
||||||
edit_format: diff
|
|
||||||
editor_edit_format: null
|
|
||||||
editor_model_name: null
|
|
||||||
examples_as_sys_msg: false
|
|
||||||
extra_params:
|
|
||||||
max_tokens: 4096
|
|
||||||
lazy: false
|
|
||||||
name: openrouter/anthropic/claude-3.5-haiku:beta
|
|
||||||
reminder: user
|
|
||||||
send_undo_reply: false
|
|
||||||
streaming: true
|
|
||||||
use_repo_map: false
|
|
||||||
use_system_prompt: true
|
|
||||||
use_temperature: true
|
|
||||||
weak_model_name: openrouter/anthropic/claude-3.5-haiku:beta
|
|
||||||
- cache_control: true
|
- cache_control: true
|
||||||
caches_by_default: false
|
caches_by_default: false
|
||||||
edit_format: whole
|
edit_format: whole
|
||||||
|
@ -667,7 +670,7 @@ cog.out("```\n")
|
||||||
use_repo_map: true
|
use_repo_map: true
|
||||||
use_system_prompt: true
|
use_system_prompt: true
|
||||||
use_temperature: true
|
use_temperature: true
|
||||||
weak_model_name: openrouter/anthropic/claude-3-haiku
|
weak_model_name: openrouter/anthropic/claude-3-5-haiku
|
||||||
- cache_control: true
|
- cache_control: true
|
||||||
caches_by_default: false
|
caches_by_default: false
|
||||||
edit_format: diff
|
edit_format: diff
|
||||||
|
@ -684,7 +687,7 @@ cog.out("```\n")
|
||||||
use_repo_map: true
|
use_repo_map: true
|
||||||
use_system_prompt: true
|
use_system_prompt: true
|
||||||
use_temperature: true
|
use_temperature: true
|
||||||
weak_model_name: openrouter/anthropic/claude-3-haiku:beta
|
weak_model_name: openrouter/anthropic/claude-3-5-haiku:beta
|
||||||
- cache_control: false
|
- cache_control: false
|
||||||
caches_by_default: false
|
caches_by_default: false
|
||||||
edit_format: diff
|
edit_format: diff
|
||||||
|
@ -701,7 +704,7 @@ cog.out("```\n")
|
||||||
use_repo_map: true
|
use_repo_map: true
|
||||||
use_system_prompt: true
|
use_system_prompt: true
|
||||||
use_temperature: true
|
use_temperature: true
|
||||||
weak_model_name: vertex_ai/claude-3-haiku@20240307
|
weak_model_name: vertex_ai/claude-3-5-haiku@20241022
|
||||||
- cache_control: false
|
- cache_control: false
|
||||||
caches_by_default: false
|
caches_by_default: false
|
||||||
edit_format: diff
|
edit_format: diff
|
||||||
|
@ -718,7 +721,7 @@ cog.out("```\n")
|
||||||
use_repo_map: true
|
use_repo_map: true
|
||||||
use_system_prompt: true
|
use_system_prompt: true
|
||||||
use_temperature: true
|
use_temperature: true
|
||||||
weak_model_name: vertex_ai/claude-3-haiku@20240307
|
weak_model_name: vertex_ai/claude-3-5-haiku@20241022
|
||||||
- cache_control: false
|
- cache_control: false
|
||||||
caches_by_default: false
|
caches_by_default: false
|
||||||
edit_format: diff
|
edit_format: diff
|
||||||
|
@ -734,7 +737,7 @@ cog.out("```\n")
|
||||||
use_repo_map: true
|
use_repo_map: true
|
||||||
use_system_prompt: true
|
use_system_prompt: true
|
||||||
use_temperature: true
|
use_temperature: true
|
||||||
weak_model_name: vertex_ai/claude-3-haiku@20240307
|
weak_model_name: vertex_ai/claude-3-5-haiku@20241022
|
||||||
- cache_control: false
|
- cache_control: false
|
||||||
caches_by_default: false
|
caches_by_default: false
|
||||||
edit_format: whole
|
edit_format: whole
|
||||||
|
@ -750,7 +753,7 @@ cog.out("```\n")
|
||||||
use_repo_map: false
|
use_repo_map: false
|
||||||
use_system_prompt: true
|
use_system_prompt: true
|
||||||
use_temperature: true
|
use_temperature: true
|
||||||
weak_model_name: vertex_ai/claude-3-haiku@20240307
|
weak_model_name: vertex_ai/claude-3-5-haiku@20241022
|
||||||
- cache_control: false
|
- cache_control: false
|
||||||
caches_by_default: false
|
caches_by_default: false
|
||||||
edit_format: whole
|
edit_format: whole
|
||||||
|
|
|
@ -30,7 +30,7 @@ current chat to build a compact
|
||||||
Adding a bunch of files that are mostly irrelevant to the
|
Adding a bunch of files that are mostly irrelevant to the
|
||||||
task at hand will often distract or confuse the LLM.
|
task at hand will often distract or confuse the LLM.
|
||||||
The LLM will give worse coding results, and sometimese even fail to correctly edit files.
|
The LLM will give worse coding results, and sometimese even fail to correctly edit files.
|
||||||
Addings extra files will also increase the token costs on your OpenAI invoice.
|
Addings extra files will also increase your token costs.
|
||||||
|
|
||||||
Again, it's usually best to just add the files to the chat that will need to be modified.
|
Again, it's usually best to just add the files to the chat that will need to be modified.
|
||||||
If you still wish to add lots of files to the chat, you can:
|
If you still wish to add lots of files to the chat, you can:
|
||||||
|
|
|
@ -318,6 +318,6 @@ mod_dates = [get_last_modified_date(file) for file in files]
|
||||||
latest_mod_date = max(mod_dates)
|
latest_mod_date = max(mod_dates)
|
||||||
cog.out(f"{latest_mod_date.strftime('%B %d, %Y.')}")
|
cog.out(f"{latest_mod_date.strftime('%B %d, %Y.')}")
|
||||||
]]]-->
|
]]]-->
|
||||||
November 04, 2024.
|
November 07, 2024.
|
||||||
<!--[[[end]]]-->
|
<!--[[[end]]]-->
|
||||||
</p>
|
</p>
|
||||||
|
|
|
@ -115,6 +115,10 @@ def comment_and_close_duplicate(issue, oldest_issue):
|
||||||
def find_unlabeled_with_paul_comments(issues):
|
def find_unlabeled_with_paul_comments(issues):
|
||||||
unlabeled_issues = []
|
unlabeled_issues = []
|
||||||
for issue in issues:
|
for issue in issues:
|
||||||
|
# Skip pull requests
|
||||||
|
if "pull_request" in issue:
|
||||||
|
continue
|
||||||
|
|
||||||
if not issue["labels"] and issue["state"] == "open":
|
if not issue["labels"] and issue["state"] == "open":
|
||||||
# Get comments for this issue
|
# Get comments for this issue
|
||||||
comments_url = (
|
comments_url = (
|
||||||
|
@ -130,25 +134,7 @@ def find_unlabeled_with_paul_comments(issues):
|
||||||
return unlabeled_issues
|
return unlabeled_issues
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def handle_unlabeled_issues(all_issues, auto_yes):
|
||||||
parser = argparse.ArgumentParser(description="Handle duplicate GitHub issues")
|
|
||||||
parser.add_argument(
|
|
||||||
"--yes", action="store_true", help="Automatically close duplicates without prompting"
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
"--find-unlabeled",
|
|
||||||
action="store_true",
|
|
||||||
help="Find unlabeled issues with paul-gauthier comments",
|
|
||||||
)
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
if not TOKEN:
|
|
||||||
print("Error: Missing GITHUB_TOKEN environment variable. Please check your .env file.")
|
|
||||||
return
|
|
||||||
|
|
||||||
all_issues = get_issues("all")
|
|
||||||
|
|
||||||
if args.find_unlabeled:
|
|
||||||
print("\nFinding unlabeled issues with paul-gauthier comments...")
|
print("\nFinding unlabeled issues with paul-gauthier comments...")
|
||||||
unlabeled_issues = find_unlabeled_with_paul_comments(all_issues)
|
unlabeled_issues = find_unlabeled_with_paul_comments(all_issues)
|
||||||
|
|
||||||
|
@ -160,7 +146,7 @@ def main():
|
||||||
for issue in unlabeled_issues:
|
for issue in unlabeled_issues:
|
||||||
print(f" - #{issue['number']}: {issue['title']} {issue['html_url']}")
|
print(f" - #{issue['number']}: {issue['title']} {issue['html_url']}")
|
||||||
|
|
||||||
if not args.yes:
|
if not auto_yes:
|
||||||
confirm = input("\nDo you want to add the 'question' label to these issues? (y/n): ")
|
confirm = input("\nDo you want to add the 'question' label to these issues? (y/n): ")
|
||||||
if confirm.lower() != "y":
|
if confirm.lower() != "y":
|
||||||
print("Skipping labeling.")
|
print("Skipping labeling.")
|
||||||
|
@ -172,7 +158,9 @@ def main():
|
||||||
response = requests.patch(url, headers=headers, json={"labels": ["question"]})
|
response = requests.patch(url, headers=headers, json={"labels": ["question"]})
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
print(f" - Added 'question' label to #{issue['number']}")
|
print(f" - Added 'question' label to #{issue['number']}")
|
||||||
return
|
|
||||||
|
|
||||||
|
def handle_duplicate_issues(all_issues, auto_yes):
|
||||||
open_issues = [issue for issue in all_issues if issue["state"] == "open"]
|
open_issues = [issue for issue in all_issues if issue["state"] == "open"]
|
||||||
grouped_open_issues = group_issues_by_subject(open_issues)
|
grouped_open_issues = group_issues_by_subject(open_issues)
|
||||||
|
|
||||||
|
@ -198,14 +186,12 @@ def main():
|
||||||
f" {oldest_issue['html_url']} ({oldest_issue['state']})"
|
f" {oldest_issue['html_url']} ({oldest_issue['state']})"
|
||||||
)
|
)
|
||||||
|
|
||||||
if not args.yes:
|
if not auto_yes:
|
||||||
# Confirmation prompt
|
|
||||||
confirm = input("Do you want to comment and close duplicate issues? (y/n): ")
|
confirm = input("Do you want to comment and close duplicate issues? (y/n): ")
|
||||||
if confirm.lower() != "y":
|
if confirm.lower() != "y":
|
||||||
print("Skipping this group of issues.")
|
print("Skipping this group of issues.")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Comment and close duplicate issues
|
|
||||||
for issue in issues:
|
for issue in issues:
|
||||||
if issue["number"] != oldest_issue["number"]:
|
if issue["number"] != oldest_issue["number"]:
|
||||||
comment_and_close_duplicate(issue, oldest_issue)
|
comment_and_close_duplicate(issue, oldest_issue)
|
||||||
|
@ -214,5 +200,22 @@ def main():
|
||||||
print(f"Oldest issue #{oldest_issue['number']} left open")
|
print(f"Oldest issue #{oldest_issue['number']} left open")
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(description="Handle duplicate GitHub issues")
|
||||||
|
parser.add_argument(
|
||||||
|
"--yes", action="store_true", help="Automatically close duplicates without prompting"
|
||||||
|
)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if not TOKEN:
|
||||||
|
print("Error: Missing GITHUB_TOKEN environment variable. Please check your .env file.")
|
||||||
|
return
|
||||||
|
|
||||||
|
all_issues = get_issues("all")
|
||||||
|
|
||||||
|
handle_unlabeled_issues(all_issues, args.yes)
|
||||||
|
handle_duplicate_issues(all_issues, args.yes)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
|
@ -17,6 +17,8 @@ from aider.utils import GitTemporaryDirectory
|
||||||
class TestCoder(unittest.TestCase):
|
class TestCoder(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.GPT35 = Model("gpt-3.5-turbo")
|
self.GPT35 = Model("gpt-3.5-turbo")
|
||||||
|
self.webbrowser_patcher = patch("aider.io.webbrowser.open")
|
||||||
|
self.mock_webbrowser = self.webbrowser_patcher.start()
|
||||||
|
|
||||||
def test_allowed_to_edit(self):
|
def test_allowed_to_edit(self):
|
||||||
with GitTemporaryDirectory():
|
with GitTemporaryDirectory():
|
||||||
|
|
|
@ -10,6 +10,7 @@ from aider.coders import editblock_coder as eb
|
||||||
from aider.dump import dump # noqa: F401
|
from aider.dump import dump # noqa: F401
|
||||||
from aider.io import InputOutput
|
from aider.io import InputOutput
|
||||||
from aider.models import Model
|
from aider.models import Model
|
||||||
|
from aider.utils import ChdirTemporaryDirectory
|
||||||
|
|
||||||
|
|
||||||
class TestUtils(unittest.TestCase):
|
class TestUtils(unittest.TestCase):
|
||||||
|
@ -341,6 +342,46 @@ These changes replace the `subprocess.run` patches with `subprocess.check_output
|
||||||
result = eb.replace_most_similar_chunk(whole, part, replace)
|
result = eb.replace_most_similar_chunk(whole, part, replace)
|
||||||
self.assertEqual(result, expected_output)
|
self.assertEqual(result, expected_output)
|
||||||
|
|
||||||
|
def test_create_new_file_with_other_file_in_chat(self):
|
||||||
|
# https://github.com/Aider-AI/aider/issues/2258
|
||||||
|
with ChdirTemporaryDirectory():
|
||||||
|
# Create a few temporary files
|
||||||
|
file1 = "file.txt"
|
||||||
|
|
||||||
|
with open(file1, "w", encoding="utf-8") as f:
|
||||||
|
f.write("one\ntwo\nthree\n")
|
||||||
|
|
||||||
|
files = [file1]
|
||||||
|
|
||||||
|
# Initialize the Coder object with the mocked IO and mocked repo
|
||||||
|
coder = Coder.create(
|
||||||
|
self.GPT35, "diff", use_git=False, io=InputOutput(yes=True), fnames=files
|
||||||
|
)
|
||||||
|
|
||||||
|
def mock_send(*args, **kwargs):
|
||||||
|
coder.partial_response_content = f"""
|
||||||
|
Do this:
|
||||||
|
|
||||||
|
newfile.txt
|
||||||
|
<<<<<<< SEARCH
|
||||||
|
=======
|
||||||
|
creating a new file
|
||||||
|
>>>>>>> REPLACE
|
||||||
|
|
||||||
|
"""
|
||||||
|
coder.partial_response_function_call = dict()
|
||||||
|
return []
|
||||||
|
|
||||||
|
coder.send = mock_send
|
||||||
|
|
||||||
|
coder.run(with_message="hi")
|
||||||
|
|
||||||
|
content = Path(file1).read_text(encoding="utf-8")
|
||||||
|
self.assertEqual(content, "one\ntwo\nthree\n")
|
||||||
|
|
||||||
|
content = Path("newfile.txt").read_text(encoding="utf-8")
|
||||||
|
self.assertEqual(content, "creating a new file\n")
|
||||||
|
|
||||||
def test_full_edit(self):
|
def test_full_edit(self):
|
||||||
# Create a few temporary files
|
# Create a few temporary files
|
||||||
_, file1 = tempfile.mkstemp()
|
_, file1 = tempfile.mkstemp()
|
||||||
|
|
|
@ -32,7 +32,7 @@ class TestMain(TestCase):
|
||||||
os.environ["HOME"] = self.homedir_obj.name
|
os.environ["HOME"] = self.homedir_obj.name
|
||||||
self.input_patcher = patch("builtins.input", return_value=None)
|
self.input_patcher = patch("builtins.input", return_value=None)
|
||||||
self.mock_input = self.input_patcher.start()
|
self.mock_input = self.input_patcher.start()
|
||||||
self.webbrowser_patcher = patch("webbrowser.open")
|
self.webbrowser_patcher = patch("aider.io.webbrowser.open")
|
||||||
self.mock_webbrowser = self.webbrowser_patcher.start()
|
self.mock_webbrowser = self.webbrowser_patcher.start()
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
|
|
|
@ -127,8 +127,9 @@ def test_git_index_version_greater_than_2(mock_browser, create_repo, mock_io):
|
||||||
"You may be able to convert your repo: git update-index --index-version=2"
|
"You may be able to convert your repo: git update-index --index-version=2"
|
||||||
)
|
)
|
||||||
mock_io.tool_output.assert_any_call("Or run aider --no-git to proceed without using git.")
|
mock_io.tool_output.assert_any_call("Or run aider --no-git to proceed without using git.")
|
||||||
mock_io.confirm_ask.assert_any_call(
|
mock_io.offer_url.assert_any_call(
|
||||||
"Open documentation url for more info?", subject=urls.git_index_version
|
urls.git_index_version,
|
||||||
|
"Open documentation url for more info?",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
import unittest
|
import unittest
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
import httpx
|
from aider.exceptions import LiteLLMExceptions
|
||||||
|
|
||||||
from aider.llm import litellm
|
from aider.llm import litellm
|
||||||
from aider.sendchat import retry_exceptions, simple_send_with_retries
|
from aider.sendchat import simple_send_with_retries
|
||||||
|
|
||||||
|
|
||||||
class PrintCalled(Exception):
|
class PrintCalled(Exception):
|
||||||
|
@ -12,9 +11,9 @@ class PrintCalled(Exception):
|
||||||
|
|
||||||
|
|
||||||
class TestSendChat(unittest.TestCase):
|
class TestSendChat(unittest.TestCase):
|
||||||
def test_retry_exceptions(self):
|
def test_litellm_exceptions(self):
|
||||||
"""Test that retry_exceptions() can be called without raising errors"""
|
litellm_ex = LiteLLMExceptions()
|
||||||
retry_exceptions() # Should not raise any exceptions
|
litellm_ex._load(strict=True)
|
||||||
|
|
||||||
@patch("litellm.completion")
|
@patch("litellm.completion")
|
||||||
@patch("builtins.print")
|
@patch("builtins.print")
|
||||||
|
@ -24,7 +23,7 @@ class TestSendChat(unittest.TestCase):
|
||||||
|
|
||||||
# Set up the mock to raise
|
# Set up the mock to raise
|
||||||
mock_completion.side_effect = [
|
mock_completion.side_effect = [
|
||||||
litellm.exceptions.RateLimitError(
|
litellm.RateLimitError(
|
||||||
"rate limit exceeded",
|
"rate limit exceeded",
|
||||||
response=mock,
|
response=mock,
|
||||||
llm_provider="llm_provider",
|
llm_provider="llm_provider",
|
||||||
|
@ -35,17 +34,4 @@ class TestSendChat(unittest.TestCase):
|
||||||
|
|
||||||
# Call the simple_send_with_retries method
|
# Call the simple_send_with_retries method
|
||||||
simple_send_with_retries("model", ["message"])
|
simple_send_with_retries("model", ["message"])
|
||||||
assert mock_print.call_count == 2
|
assert mock_print.call_count == 3
|
||||||
|
|
||||||
@patch("litellm.completion")
|
|
||||||
@patch("builtins.print")
|
|
||||||
def test_simple_send_with_retries_connection_error(self, mock_print, mock_completion):
|
|
||||||
# Set up the mock to raise
|
|
||||||
mock_completion.side_effect = [
|
|
||||||
httpx.ConnectError("Connection error"),
|
|
||||||
None,
|
|
||||||
]
|
|
||||||
|
|
||||||
# Call the simple_send_with_retries method
|
|
||||||
simple_send_with_retries("model", ["message"])
|
|
||||||
assert mock_print.call_count == 2
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue