diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index 2c4fb4e01..00151de74 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -53,10 +53,10 @@ class Coder: @classmethod def create( self, - client, main_model=None, edit_format=None, io=None, + client=None, skip_model_availabily_check=False, **kwargs, ): @@ -67,12 +67,13 @@ class Coder: if not skip_model_availabily_check and not main_model.always_available: if not check_model_availability(io, client, main_model): + fallback_model = models.GPT35_1106 if main_model != models.GPT4: io.tool_error( f"API key does not support {main_model.name}, falling back to" - f" {models.GPT35_16k.name}" + f" {fallback_model.name}" ) - main_model = models.GPT35_16k + main_model = fallback_model if edit_format is None: edit_format = main_model.edit_format @@ -163,7 +164,9 @@ class Coder: if use_git: try: - self.repo = GitRepo(self.io, fnames, git_dname, aider_ignore_file) + self.repo = GitRepo( + self.io, fnames, git_dname, aider_ignore_file, client=self.client + ) self.root = self.repo.root except FileNotFoundError: self.repo = None @@ -950,7 +953,8 @@ class Coder: def check_model_availability(io, client, main_model): available_models = client.models.list() - model_ids = sorted(model.id for model in available_models["data"]) + dump(available_models) + model_ids = sorted(model.id for model in available_models) if main_model.name in model_ids: return True diff --git a/aider/main.py b/aider/main.py index b32d930b4..36cf7574e 100644 --- a/aider/main.py +++ b/aider/main.py @@ -157,12 +157,13 @@ def main(argv=None, input=None, output=None, force_git_root=None): default=False, help="Override to skip model availability check (default: False)", ) + default_3_model = models.GPT35_1106 core_group.add_argument( "-3", action="store_const", dest="model", - const=models.GPT35_16k.name, - help=f"Use {models.GPT35_16k.name} model for the main chat (gpt-4 is better)", + const=default_3_model.name, + help=f"Use {default_3_model.name} model for the main chat (gpt-4 is better)", ) core_group.add_argument( "--voice-language", @@ -509,11 +510,11 @@ def main(argv=None, input=None, output=None, force_git_root=None): try: coder = Coder.create( - client, - main_model, - args.edit_format, - io, - args.skip_model_availability_check, + main_model=main_model, + edit_format=args.edit_format, + io=io, + skip_model_availabily_check=args.skip_model_availability_check, + client=client, ## fnames=fnames, git_dname=git_dname, diff --git a/aider/models/__init__.py b/aider/models/__init__.py index fa8aa3673..d16015830 100644 --- a/aider/models/__init__.py +++ b/aider/models/__init__.py @@ -4,6 +4,7 @@ from .openrouter import OpenRouterModel GPT4 = Model.create("gpt-4") GPT35 = Model.create("gpt-3.5-turbo") +GPT35_1106 = Model.create("gpt-3.5-turbo-1106") GPT35_16k = Model.create("gpt-3.5-turbo-16k") __all__ = [ diff --git a/aider/models/model.py b/aider/models/model.py index 2c594746b..70f09d313 100644 --- a/aider/models/model.py +++ b/aider/models/model.py @@ -33,11 +33,11 @@ class Model: @staticmethod def weak_model(): - return Model.create("gpt-3.5-turbo") + return Model.create("gpt-3.5-turbo-1106") @staticmethod def commit_message_models(): - return [Model.create("gpt-3.5-turbo"), Model.create("gpt-3.5-turbo-16k")] + return [Model.weak_model()] def token_count(self, messages): if not self.tokenizer: diff --git a/aider/models/openai.py b/aider/models/openai.py index e6674d769..1c6286d63 100644 --- a/aider/models/openai.py +++ b/aider/models/openai.py @@ -55,6 +55,7 @@ class OpenAIModel(Model): if self.is_gpt35(): self.edit_format = "whole" self.always_available = True + self.send_undo_reply = False if self.name == "gpt-3.5-turbo-1106": self.prompt_price = 0.001 diff --git a/aider/models/openrouter.py b/aider/models/openrouter.py index 404ac1908..6c9eec21e 100644 --- a/aider/models/openrouter.py +++ b/aider/models/openrouter.py @@ -7,12 +7,8 @@ cached_model_details = None class OpenRouterModel(Model): def __init__(self, client, name): - if name == "gpt-4": - name = "openai/gpt-4" - elif name == "gpt-3.5-turbo": - name = "openai/gpt-3.5-turbo" - elif name == "gpt-3.5-turbo-16k": - name = "openai/gpt-3.5-turbo-16k" + if name.startswith("gpt-4") or name.startswith("gpt-3.5-turbo"): + name = "openai/" + name self.name = name self.edit_format = edit_format_for_model(name) diff --git a/aider/repo.py b/aider/repo.py index 62ec051c3..224a5ab87 100644 --- a/aider/repo.py +++ b/aider/repo.py @@ -110,9 +110,7 @@ class GitRepo: raise OpenAIClientNotProvided if len(diffs) >= 4 * 1024 * 4: - self.io.tool_error( - f"Diff is too large for {models.GPT35.name} to generate a commit message." - ) + self.io.tool_error("Diff is too large to generate a commit message.") return diffs = "# Diffs:\n" + diffs diff --git a/tests/test_models.py b/tests/test_models.py index 62e87304b..48e797b12 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -12,6 +12,9 @@ class TestModels(unittest.TestCase): model = Model.create("gpt-3.5-turbo-16k") self.assertEqual(model.max_context_tokens, 16 * 1024) + model = Model.create("gpt-3.5-turbo-1106") + self.assertEqual(model.max_context_tokens, 16 * 1024) + model = Model.create("gpt-4") self.assertEqual(model.max_context_tokens, 8 * 1024)