refactor: Modify response content handling and reasoning removal logic

This commit is contained in:
Paul Gauthier 2025-02-04 13:37:43 -08:00 committed by Paul Gauthier (aider)
parent 4f8c52f09e
commit 47e91e943c
3 changed files with 21 additions and 16 deletions

View file

@ -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}>.*?</{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:

View file

@ -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()

View file

@ -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}>.*?</{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))