Spaces:
Build error
Build error
| from litellm import ChatCompletionToolParam, ChatCompletionToolParamFunctionChunk | |
| _FILE_EDIT_DESCRIPTION = """Edit a file in plain-text format. | |
| * The assistant can edit files by specifying the file path and providing a draft of the new file content. | |
| * The draft content doesn't need to be exactly the same as the existing file; the assistant may skip unchanged lines using comments like `# unchanged` to indicate unchanged sections. | |
| * IMPORTANT: For large files (e.g., > 300 lines), specify the range of lines to edit using `start` and `end` (1-indexed, inclusive). The range should be smaller than 300 lines. | |
| * To append to a file, set both `start` and `end` to `-1`. | |
| * If the file doesn't exist, a new file will be created with the provided content. | |
| **Example 1: general edit for short files** | |
| For example, given an existing file `/path/to/file.py` that looks like this: | |
| (this is the beginning of the file) | |
| 1|class MyClass: | |
| 2| def __init__(self): | |
| 3| self.x = 1 | |
| 4| self.y = 2 | |
| 5| self.z = 3 | |
| 6| | |
| 7|print(MyClass().z) | |
| 8|print(MyClass().x) | |
| (this is the end of the file) | |
| The assistant wants to edit the file to look like this: | |
| (this is the beginning of the file) | |
| 1|class MyClass: | |
| 2| def __init__(self): | |
| 3| self.x = 1 | |
| 4| self.y = 2 | |
| 5| | |
| 6|print(MyClass().y) | |
| (this is the end of the file) | |
| The assistant may produce an edit action like this: | |
| path="/path/to/file.txt" start=1 end=-1 | |
| content=``` | |
| class MyClass: | |
| def __init__(self): | |
| # no changes before | |
| self.y = 2 | |
| # self.z is removed | |
| # MyClass().z is removed | |
| print(MyClass().y) | |
| ``` | |
| **Example 2: append to file for short files** | |
| For example, given an existing file `/path/to/file.py` that looks like this: | |
| (this is the beginning of the file) | |
| 1|class MyClass: | |
| 2| def __init__(self): | |
| 3| self.x = 1 | |
| 4| self.y = 2 | |
| 5| self.z = 3 | |
| 6| | |
| 7|print(MyClass().z) | |
| 8|print(MyClass().x) | |
| (this is the end of the file) | |
| To append the following lines to the file: | |
| ```python | |
| print(MyClass().y) | |
| ``` | |
| The assistant may produce an edit action like this: | |
| path="/path/to/file.txt" start=-1 end=-1 | |
| content=``` | |
| print(MyClass().y) | |
| ``` | |
| **Example 3: edit for long files** | |
| Given an existing file `/path/to/file.py` that looks like this: | |
| (1000 more lines above) | |
| 1001|class MyClass: | |
| 1002| def __init__(self): | |
| 1003| self.x = 1 | |
| 1004| self.y = 2 | |
| 1005| self.z = 3 | |
| 1006| | |
| 1007|print(MyClass().z) | |
| 1008|print(MyClass().x) | |
| (2000 more lines below) | |
| The assistant wants to edit the file to look like this: | |
| (1000 more lines above) | |
| 1001|class MyClass: | |
| 1002| def __init__(self): | |
| 1003| self.x = 1 | |
| 1004| self.y = 2 | |
| 1005| | |
| 1006|print(MyClass().y) | |
| (2000 more lines below) | |
| The assistant may produce an edit action like this: | |
| path="/path/to/file.txt" start=1001 end=1008 | |
| content=``` | |
| class MyClass: | |
| def __init__(self): | |
| # no changes before | |
| self.y = 2 | |
| # self.z is removed | |
| # MyClass().z is removed | |
| print(MyClass().y) | |
| ``` | |
| """ | |
| LLMBasedFileEditTool = ChatCompletionToolParam( | |
| type='function', | |
| function=ChatCompletionToolParamFunctionChunk( | |
| name='edit_file', | |
| description=_FILE_EDIT_DESCRIPTION, | |
| parameters={ | |
| 'type': 'object', | |
| 'properties': { | |
| 'path': { | |
| 'type': 'string', | |
| 'description': 'The absolute path to the file to be edited.', | |
| }, | |
| 'content': { | |
| 'type': 'string', | |
| 'description': 'A draft of the new content for the file being edited. Note that the assistant may skip unchanged lines.', | |
| }, | |
| 'start': { | |
| 'type': 'integer', | |
| 'description': 'The starting line number for the edit (1-indexed, inclusive). Default is 1.', | |
| }, | |
| 'end': { | |
| 'type': 'integer', | |
| 'description': 'The ending line number for the edit (1-indexed, inclusive). Default is -1 (end of file).', | |
| }, | |
| }, | |
| 'required': ['path', 'content'], | |
| }, | |
| ), | |
| ) | |