-
Notifications
You must be signed in to change notification settings - Fork 2.7k
feat: add search_replace native tool for single-replacement operations #9918
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,51 @@ | ||
| import type OpenAI from "openai" | ||
|
|
||
| const SEARCH_REPLACE_DESCRIPTION = `Use this tool to propose a search and replace operation on an existing file. | ||
|
|
||
| The tool will replace ONE occurrence of old_string with new_string in the specified file. | ||
|
|
||
| CRITICAL REQUIREMENTS FOR USING THIS TOOL: | ||
|
|
||
| 1. UNIQUENESS: The old_string MUST uniquely identify the specific instance you want to change. This means: | ||
| - Include AT LEAST 3-5 lines of context BEFORE the change point | ||
| - Include AT LEAST 3-5 lines of context AFTER the change point | ||
| - Include all whitespace, indentation, and surrounding code exactly as it appears in the file | ||
|
|
||
| 2. SINGLE INSTANCE: This tool can only change ONE instance at a time. If you need to change multiple instances: | ||
| - Make separate calls to this tool for each instance | ||
| - Each call must uniquely identify its specific instance using extensive context | ||
|
|
||
| 3. VERIFICATION: Before using this tool: | ||
| - If multiple instances exist, gather enough context to uniquely identify each one | ||
| - Plan separate tool calls for each instance` | ||
|
|
||
| const search_replace = { | ||
| type: "function", | ||
| function: { | ||
| name: "search_replace", | ||
| description: SEARCH_REPLACE_DESCRIPTION, | ||
| parameters: { | ||
| type: "object", | ||
| properties: { | ||
| file_path: { | ||
| type: "string", | ||
| description: | ||
| "The path to the file you want to search and replace in. You can use either a relative path in the workspace or an absolute path. If an absolute path is provided, it will be preserved as is.", | ||
| }, | ||
| old_string: { | ||
| type: "string", | ||
| description: | ||
| "The text to replace (must be unique within the file, and must match the file contents exactly, including all whitespace and indentation)", | ||
| }, | ||
| new_string: { | ||
| type: "string", | ||
| description: "The edited text to replace the old_string (must be different from the old_string)", | ||
| }, | ||
| }, | ||
| required: ["file_path", "old_string", "new_string"], | ||
| additionalProperties: false, | ||
| }, | ||
| }, | ||
| } satisfies OpenAI.Chat.ChatCompletionTool | ||
|
|
||
| export default search_replace |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@roomote Remove this type override.
Note: We need to later look into typing for nativeArgs in general.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed the reported issue. Since PR #9918 was already merged, created follow-up PR #9922 with the fix. All local checks passed.
View commit | View follow-up PR | Revert commit