diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index a064a64ce..66e62cd7c 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -1324,7 +1324,7 @@ class Coder: exhausted = True break - self.multi_response_content = self.get_multi_response_content() + self.multi_response_content = self.get_multi_response_content_in_progress() if messages[-1]["role"] == "assistant": messages[-1]["content"] = self.multi_response_content @@ -1344,7 +1344,10 @@ class Coder: self.live_incremental_response(True) self.mdstream = None - self.partial_response_content = self.get_multi_response_content(True) + self.partial_response_content = self.get_multi_response_content_in_progress(True) + self.partial_response_content = self.main_model.remove_reasoning_content( + self.partial_response_content + ) self.multi_response_content = "" self.io.tool_output() @@ -1731,7 +1734,7 @@ class Coder: self.mdstream.update(show_resp, final=final) def render_incremental_response(self, final): - return self.get_multi_response_content() + return self.get_multi_response_content_in_progress() def calculate_and_show_tokens_and_cost(self, messages, completion=None): prompt_tokens = 0 @@ -1854,22 +1857,14 @@ class Coder: self.message_tokens_sent = 0 self.message_tokens_received = 0 - def get_multi_response_content(self, final=False): + def get_multi_response_content_in_progress(self, final=False): cur = self.multi_response_content or "" new = self.partial_response_content or "" if new.rstrip() != new and not final: new = new.rstrip() - res = cur + new - - if self.main_model.remove_reasoning: - pattern = ( - f"<{self.main_model.remove_reasoning}>.*?" - ) - res = re.sub(pattern, "", res, flags=re.DOTALL).strip() - - return res + return cur + new def get_rel_fname(self, fname): try: diff --git a/aider/coders/wholefile_coder.py b/aider/coders/wholefile_coder.py index 7cd9bac1b..ad93aff69 100644 --- a/aider/coders/wholefile_coder.py +++ b/aider/coders/wholefile_coder.py @@ -17,10 +17,10 @@ class WholeFileCoder(Coder): try: return self.get_edits(mode="diff") except ValueError: - return self.get_multi_response_content() + return self.get_multi_response_content_in_progress() def get_edits(self, mode="update"): - content = self.get_multi_response_content() + content = self.get_multi_response_content_in_progress() chat_files = self.get_inchat_relative_files() diff --git a/aider/models.py b/aider/models.py index 3c13e675a..4329886d7 100644 --- a/aider/models.py +++ b/aider/models.py @@ -565,6 +565,14 @@ class Model(ModelSettings): res = litellm.completion(**kwargs) return hash_object, res + def remove_reasoning_content(self, res): + if not self.remove_reasoning: + return res + + pattern = f"<{self.remove_reasoning}>.*?" + res = re.sub(pattern, "", res, flags=re.DOTALL).strip() + return res + def simple_send_with_retries(self, messages): from aider.exceptions import LiteLLMExceptions @@ -583,7 +591,9 @@ class Model(ModelSettings): _hash, response = self.send_completion(**kwargs) if not response or not hasattr(response, "choices") or not response.choices: return None - return response.choices[0].message.content + res = response.choices[0].message.content + return self.remove_reasoning_content(res) + except litellm_ex.exceptions_tuple() as err: ex_info = litellm_ex.get_ex_info(err) print(str(err))