mirror of
https://github.com/Aider-AI/aider.git
synced 2025-06-02 02:34:59 +00:00
refactor: Move remove_reasoning_content from Model to reasoning_tags.py
This commit is contained in:
parent
e18593fe88
commit
ca6abdfc61
3 changed files with 39 additions and 22 deletions
|
@ -1830,9 +1830,12 @@ class Coder:
|
||||||
def remove_reasoning_content(self):
|
def remove_reasoning_content(self):
|
||||||
"""Remove reasoning content from the model's response."""
|
"""Remove reasoning content from the model's response."""
|
||||||
|
|
||||||
self.partial_response_content = self.main_model.remove_reasoning_content(
|
from aider.reasoning_tags import remove_reasoning_content
|
||||||
|
|
||||||
|
self.partial_response_content = remove_reasoning_content(
|
||||||
self.partial_response_content,
|
self.partial_response_content,
|
||||||
self.reasoning_tag_name,
|
self.reasoning_tag_name,
|
||||||
|
self.main_model.remove_reasoning,
|
||||||
)
|
)
|
||||||
|
|
||||||
def calculate_and_show_tokens_and_cost(self, messages, completion=None):
|
def calculate_and_show_tokens_and_cost(self, messages, completion=None):
|
||||||
|
|
|
@ -633,26 +633,6 @@ class Model(ModelSettings):
|
||||||
res = litellm.completion(**kwargs)
|
res = litellm.completion(**kwargs)
|
||||||
return hash_object, res
|
return hash_object, res
|
||||||
|
|
||||||
def remove_reasoning_content(self, res, reasoning_tag=None):
|
|
||||||
if not reasoning_tag:
|
|
||||||
reasoning_tag = self.remove_reasoning
|
|
||||||
|
|
||||||
if not reasoning_tag:
|
|
||||||
return res
|
|
||||||
|
|
||||||
# Try to match the complete tag pattern first
|
|
||||||
pattern = f"<{reasoning_tag}>.*?</{reasoning_tag}>"
|
|
||||||
res = re.sub(pattern, "", res, flags=re.DOTALL).strip()
|
|
||||||
|
|
||||||
# If closing tag exists but opening tag might be missing, remove everything before closing
|
|
||||||
# tag
|
|
||||||
closing_tag = f"</{reasoning_tag}>"
|
|
||||||
if closing_tag in res:
|
|
||||||
# Split on the closing tag and keep everything after it
|
|
||||||
parts = res.split(closing_tag, 1)
|
|
||||||
res = parts[1].strip() if len(parts) > 1 else res
|
|
||||||
|
|
||||||
return res
|
|
||||||
|
|
||||||
def simple_send_with_retries(self, messages):
|
def simple_send_with_retries(self, messages):
|
||||||
from aider.exceptions import LiteLLMExceptions
|
from aider.exceptions import LiteLLMExceptions
|
||||||
|
@ -674,7 +654,8 @@ class Model(ModelSettings):
|
||||||
if not response or not hasattr(response, "choices") or not response.choices:
|
if not response or not hasattr(response, "choices") or not response.choices:
|
||||||
return None
|
return None
|
||||||
res = response.choices[0].message.content
|
res = response.choices[0].message.content
|
||||||
return self.remove_reasoning_content(res)
|
from aider.reasoning_tags import remove_reasoning_content
|
||||||
|
return remove_reasoning_content(res, self.remove_reasoning)
|
||||||
|
|
||||||
except litellm_ex.exceptions_tuple() as err:
|
except litellm_ex.exceptions_tuple() as err:
|
||||||
ex_info = litellm_ex.get_ex_info(err)
|
ex_info = litellm_ex.get_ex_info(err)
|
||||||
|
|
|
@ -11,6 +11,39 @@ REASONING_START = "> Thinking ..."
|
||||||
REASONING_END = "> ... done thinking.\n\n------"
|
REASONING_END = "> ... done thinking.\n\n------"
|
||||||
|
|
||||||
|
|
||||||
|
def remove_reasoning_content(res, reasoning_tag=None, model_remove_reasoning=None):
|
||||||
|
"""
|
||||||
|
Remove reasoning content from text based on tags.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
res (str): The text to process
|
||||||
|
reasoning_tag (str): The tag name to remove
|
||||||
|
model_remove_reasoning (str): Fallback tag name from model settings
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: Text with reasoning content removed
|
||||||
|
"""
|
||||||
|
if not reasoning_tag:
|
||||||
|
reasoning_tag = model_remove_reasoning
|
||||||
|
|
||||||
|
if not reasoning_tag:
|
||||||
|
return res
|
||||||
|
|
||||||
|
# Try to match the complete tag pattern first
|
||||||
|
pattern = f"<{reasoning_tag}>.*?</{reasoning_tag}>"
|
||||||
|
res = re.sub(pattern, "", res, flags=re.DOTALL).strip()
|
||||||
|
|
||||||
|
# If closing tag exists but opening tag might be missing, remove everything before closing
|
||||||
|
# tag
|
||||||
|
closing_tag = f"</{reasoning_tag}>"
|
||||||
|
if closing_tag in res:
|
||||||
|
# Split on the closing tag and keep everything after it
|
||||||
|
parts = res.split(closing_tag, 1)
|
||||||
|
res = parts[1].strip() if len(parts) > 1 else res
|
||||||
|
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
def replace_reasoning_tags(text, tag_name):
|
def replace_reasoning_tags(text, tag_name):
|
||||||
"""
|
"""
|
||||||
Replace opening and closing reasoning tags with standard formatting.
|
Replace opening and closing reasoning tags with standard formatting.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue