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'], }, ), )