mirror of
https://github.com/Aider-AI/aider.git
synced 2025-06-12 07:35:00 +00:00
Only process SEARCH/REPLACE blocks before the tool call separator
This commit is contained in:
parent
5e81b6c1c4
commit
123879fad5
2 changed files with 33 additions and 12 deletions
|
@ -364,7 +364,7 @@ class NavigatorCoder(Coder):
|
||||||
|
|
||||||
This is a key method that:
|
This is a key method that:
|
||||||
1. Processes any tool commands in the response (only after a '---' line)
|
1. Processes any tool commands in the response (only after a '---' line)
|
||||||
2. Processes any SEARCH/REPLACE blocks in the response (regardless of tool calls)
|
2. Processes any SEARCH/REPLACE blocks in the response (only before the '---' line if one exists)
|
||||||
3. If tool commands were found, sets up for another automatic round
|
3. If tool commands were found, sets up for another automatic round
|
||||||
|
|
||||||
This enables the "auto-exploration" workflow where the LLM can
|
This enables the "auto-exploration" workflow where the LLM can
|
||||||
|
@ -376,8 +376,9 @@ class NavigatorCoder(Coder):
|
||||||
return True
|
return True
|
||||||
original_content = content # Keep the original response
|
original_content = content # Keep the original response
|
||||||
|
|
||||||
# Process tool commands: returns content with tool calls removed, results, and flag if any tool calls were found
|
# Process tool commands: returns content with tool calls removed, results, flag if any tool calls were found,
|
||||||
processed_content, result_messages, tool_calls_found = self._process_tool_commands(content)
|
# and the content before the last '---' line
|
||||||
|
processed_content, result_messages, tool_calls_found, content_before_last_separator = self._process_tool_commands(content)
|
||||||
|
|
||||||
# Since we are no longer suppressing, the partial_response_content IS the final content.
|
# Since we are no longer suppressing, the partial_response_content IS the final content.
|
||||||
# We might want to update it to the processed_content (without tool calls) if we don't
|
# We might want to update it to the processed_content (without tool calls) if we don't
|
||||||
|
@ -388,12 +389,21 @@ class NavigatorCoder(Coder):
|
||||||
# Process implicit file mentions using the content *after* tool calls were removed
|
# Process implicit file mentions using the content *after* tool calls were removed
|
||||||
self._process_file_mentions(processed_content)
|
self._process_file_mentions(processed_content)
|
||||||
|
|
||||||
# Check if the content contains the SEARCH/REPLACE markers (do this regardless of tool calls)
|
# Check if the content contains the SEARCH/REPLACE markers
|
||||||
has_search = "<<<<<<< SEARCH" in self.partial_response_content
|
has_search = "<<<<<<< SEARCH" in self.partial_response_content
|
||||||
has_divider = "=======" in self.partial_response_content
|
has_divider = "=======" in self.partial_response_content
|
||||||
has_replace = ">>>>>>> REPLACE" in self.partial_response_content
|
has_replace = ">>>>>>> REPLACE" in self.partial_response_content
|
||||||
edit_match = has_search and has_divider and has_replace
|
edit_match = has_search and has_divider and has_replace
|
||||||
|
|
||||||
|
# Check if there's a '---' line - if yes, SEARCH/REPLACE blocks can only appear before it
|
||||||
|
separator_marker = "\n---\n"
|
||||||
|
if separator_marker in original_content and edit_match:
|
||||||
|
# Check if the edit blocks are only in the part before the last '---' line
|
||||||
|
has_search_before = "<<<<<<< SEARCH" in content_before_last_separator
|
||||||
|
has_divider_before = "=======" in content_before_last_separator
|
||||||
|
has_replace_before = ">>>>>>> REPLACE" in content_before_last_separator
|
||||||
|
edit_match = has_search_before and has_divider_before and has_replace_before
|
||||||
|
|
||||||
if edit_match:
|
if edit_match:
|
||||||
self.io.tool_output("Detected edit blocks, applying changes within Navigator...")
|
self.io.tool_output("Detected edit blocks, applying changes within Navigator...")
|
||||||
edited_files = self._apply_edits_from_response()
|
edited_files = self._apply_edits_from_response()
|
||||||
|
@ -464,8 +474,10 @@ class NavigatorCoder(Coder):
|
||||||
Rules:
|
Rules:
|
||||||
1. Tool calls must appear after the LAST '---' line separator in the content
|
1. Tool calls must appear after the LAST '---' line separator in the content
|
||||||
2. Any tool calls before this last separator are treated as text (not executed)
|
2. Any tool calls before this last separator are treated as text (not executed)
|
||||||
|
3. SEARCH/REPLACE blocks can only appear before this last separator
|
||||||
|
|
||||||
Returns processed content, result messages, and a flag indicating if any tool calls were found.
|
Returns processed content, result messages, and a flag indicating if any tool calls were found.
|
||||||
|
Also returns the content before the last separator for SEARCH/REPLACE block validation.
|
||||||
"""
|
"""
|
||||||
result_messages = []
|
result_messages = []
|
||||||
modified_content = content # Start with original content
|
modified_content = content # Start with original content
|
||||||
|
@ -479,16 +491,16 @@ class NavigatorCoder(Coder):
|
||||||
|
|
||||||
# If there's no separator, treat the entire content as before the separator
|
# If there's no separator, treat the entire content as before the separator
|
||||||
if len(content_parts) == 1:
|
if len(content_parts) == 1:
|
||||||
# Return the original content with no tool calls processed
|
# Return the original content with no tool calls processed, and the content itself as before_separator
|
||||||
return content, result_messages, False
|
return content, result_messages, False, content
|
||||||
|
|
||||||
# Take everything before the last separator (including intermediate separators)
|
# Take everything before the last separator (including intermediate separators)
|
||||||
content_before_separator = separator_marker.join(content_parts[:-1]) + separator_marker
|
content_before_separator = separator_marker.join(content_parts[:-1])
|
||||||
# Take only what comes after the last separator
|
# Take only what comes after the last separator
|
||||||
content_after_separator = content_parts[-1]
|
content_after_separator = content_parts[-1]
|
||||||
|
|
||||||
# Find tool calls using a more robust method, but only in the content after separator
|
# Find tool calls using a more robust method, but only in the content after separator
|
||||||
processed_content = content_before_separator
|
processed_content = content_before_separator + separator_marker
|
||||||
last_index = 0
|
last_index = 0
|
||||||
start_marker = "[tool_call("
|
start_marker = "[tool_call("
|
||||||
end_marker = "]" # The parenthesis balancing finds the ')', we just need the final ']'
|
end_marker = "]" # The parenthesis balancing finds the ')', we just need the final ']'
|
||||||
|
@ -945,7 +957,7 @@ class NavigatorCoder(Coder):
|
||||||
# Update internal counter
|
# Update internal counter
|
||||||
self.tool_call_count += call_count
|
self.tool_call_count += call_count
|
||||||
|
|
||||||
return modified_content, result_messages, tool_calls_found
|
return modified_content, result_messages, tool_calls_found, content_before_separator
|
||||||
|
|
||||||
def _apply_edits_from_response(self):
|
def _apply_edits_from_response(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -158,7 +158,14 @@ When you include any tool call, the system will automatically continue to the ne
|
||||||
```
|
```
|
||||||
Your answer to the user's question...
|
Your answer to the user's question...
|
||||||
|
|
||||||
SEARCH/REPLACE blocks can appear anywhere in your response if needed.
|
SEARCH/REPLACE blocks can ONLY appear BEFORE the last '---' separator.
|
||||||
|
|
||||||
|
file.py
|
||||||
|
<<<<<<< SEARCH
|
||||||
|
old code
|
||||||
|
=======
|
||||||
|
new code
|
||||||
|
>>>>>>> REPLACE
|
||||||
|
|
||||||
---
|
---
|
||||||
[tool_call(ViewFilesMatching, pattern="findme")]
|
[tool_call(ViewFilesMatching, pattern="findme")]
|
||||||
|
@ -446,7 +453,8 @@ Here are summaries of some files present in this repo:
|
||||||
- You are encouraged to use tools for editing where possible, falling back to SEARCH/REPLACE when that doesn't work well.
|
- You are encouraged to use tools for editing where possible, falling back to SEARCH/REPLACE when that doesn't work well.
|
||||||
|
|
||||||
## SEARCH/REPLACE blocks
|
## SEARCH/REPLACE blocks
|
||||||
- When you use them, SEARCH/REPLACE blocks can appear anywhere in your response
|
- When using SEARCH/REPLACE blocks, they MUST ONLY appear BEFORE the last '---' separator line in your response
|
||||||
|
- If there is no '---' separator, they can appear anywhere in your response
|
||||||
- Format example:
|
- Format example:
|
||||||
```
|
```
|
||||||
Your answer text here...
|
Your answer text here...
|
||||||
|
@ -461,6 +469,7 @@ Here are summaries of some files present in this repo:
|
||||||
---
|
---
|
||||||
[tool_call(ToolName, param1=value1)]
|
[tool_call(ToolName, param1=value1)]
|
||||||
```
|
```
|
||||||
|
- IMPORTANT: Any SEARCH/REPLACE blocks that appear after the last '---' separator will be IGNORED
|
||||||
|
|
||||||
## Context Features
|
## Context Features
|
||||||
- Use enhanced context blocks (directory structure and git status) to orient yourself
|
- Use enhanced context blocks (directory structure and git status) to orient yourself
|
||||||
|
@ -486,4 +495,4 @@ Let me explore the codebase more strategically this time:
|
||||||
- I'll use tool calls to automatically continue exploration until I have enough information
|
- I'll use tool calls to automatically continue exploration until I have enough information
|
||||||
|
|
||||||
I'll start exploring again with improved search strategies to find exactly what we need.
|
I'll start exploring again with improved search strategies to find exactly what we need.
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue