diff --git a/aider/coder.py b/aider/coder.py index f93a4c79e..25e612710 100755 --- a/aider/coder.py +++ b/aider/coder.py @@ -90,6 +90,10 @@ class Coder: self.io.tool_output( f"Using {main_model.name} (experimental): disabling ctags/repo-maps.", ) + + self.edit_format = self.main_model.edit_format + + if self.edit_format == "whole": self.gpt_prompts = prompts.GPT35() else: self.gpt_prompts = prompts.GPT4() @@ -343,8 +347,9 @@ class Coder: if edit_error: return edit_error - if self.main_model in models.GPT4_models or not edited: - # Don't add 3.5 assistant messages to the history if they contain "edits" + if not (self.edit_format == "whole" and edited): + # Don't add assistant messages to the history if they contain "edits" + # from the "whole" edit format. # Because those edits are actually fully copies of the file! # That wastes too much context window. self.cur_messages += [dict(role="assistant", content=content)] @@ -478,7 +483,7 @@ class Coder: if self.pretty: show_resp = self.resp - if self.main_model in models.GPT35_models: + if self.edit_format == "whole": try: show_resp = self.update_files_gpt35(self.resp, mode="diff") except ValueError: @@ -782,9 +787,9 @@ class Coder: return set(self.get_all_relative_files()) - set(self.get_inchat_relative_files()) def apply_updates(self, content): - if self.main_model in models.GPT4_models: + if self.edit_format == "diff": method = self.update_files_gpt4 - elif self.main_model in models.GPT35_models: + elif self.edit_format == "whole": method = self.update_files_gpt35 else: raise ValueError(f"apply_updates() doesn't support {self.main_model.name}") diff --git a/aider/models.py b/aider/models.py index 36d6c10c9..8d5e0a1b1 100644 --- a/aider/models.py +++ b/aider/models.py @@ -1,6 +1,7 @@ class Model_GPT4_32k: name = "gpt-4-32k" max_context_tokens = 32 * 1024 + edit_format = "diff" GPT4_32k = Model_GPT4_32k() @@ -9,6 +10,7 @@ GPT4_32k = Model_GPT4_32k() class Model_GPT4: name = "gpt-4" max_context_tokens = 8 * 1024 + edit_format = "diff" GPT4 = Model_GPT4() @@ -17,6 +19,7 @@ GPT4 = Model_GPT4() class Model_GPT35: name = "gpt-3.5-turbo" max_context_tokens = 4 * 1024 + edit_format = "whole" GPT35 = Model_GPT35() @@ -25,6 +28,7 @@ GPT35 = Model_GPT35() class Model_GPT35_16k: name = "gpt-3.5-turbo-16k" max_context_tokens = 16 * 1024 + edit_format = "whole" GPT35_16k = Model_GPT35_16k()