diff --git a/pkg/cli/functions.go b/pkg/cli/functions.go index d193262..3654b68 100644 --- a/pkg/cli/functions.go +++ b/pkg/cli/functions.go @@ -35,11 +35,8 @@ type AvailableTool struct { Impl func(arguments map[string]interface{}) (string, error) } -var AvailableTools = map[string]AvailableTool{ - "read_dir": { - Tool: openai.Tool{Type: "function", Function: openai.FunctionDefinition{ - Name: "read_dir", - Description: `Return the contents of the CWD (current working directory). +const ( + READ_DIR_DESCRIPTION = `Return the contents of the CWD (current working directory). Results are returned as JSON in the following format: { @@ -53,7 +50,52 @@ Results are returned as JSON in the following format: } For files, size represents the size (in bytes) of the file. -For directories, size represents the number of entries in that directory.`, +For directories, size represents the number of entries in that directory.` + + READ_FILE_DESCRIPTION = `Read the contents of a text file relative to the current working directory. + +Each line of the file is prefixed with its line number and a tabs (\t) to make +it make it easier to see which lines to change for other modifications. + +Example: +{ + "message": "success", // if successful, or a different message indicating failure + "result": "1\tthe contents\n2\tof the file\n" +}` + + WRITE_FILE_DESCRIPTION = `Write the provided contents to a file relative to the current working directory. + +Result is returned as JSON in the following format: +{ + "message": "success", // if successful, or a different message indicating failure +}` + + MODIFY_FILE_DESCRIPTION = `Perform complex line-based modifications to a file. + +Line ranges are inclusive. If 'start_line' is specified but 'end_line' is not, +'end_line' gets set to the last line of the file. + +To replace or remove a single line, *set start_line and end_line to the same value* + +Examples: +* Insert the lines "helloworld" at line 10, preserving other content: + {"path": "myfile", "operation": "insert_before", "start_line": 10, "content": "hello\nworld"} + +* Remove lines 45 up to and including 54: + {"path": "myfile", "operation": "remove", "start_line": 45, "end_line": 54} + +* Replace content from line 10 to 25: + {"path": "myfile", "operation": "replace", "start_line": 10, "end_line": 25, "content": "i\nwas\nhere"} + +* Replace contents of entire the file: + {"path": "myfile", "operation": "replace", "start_line": 0, "content": "i\nwas\nhere"}` +) + +var AvailableTools = map[string]AvailableTool{ + "read_dir": { + Tool: openai.Tool{Type: "function", Function: openai.FunctionDefinition{ + Name: "read_dir", + Description: READ_DIR_DESCRIPTION, Parameters: FunctionParameters{ Type: "object", Properties: map[string]FunctionParameter{ @@ -78,17 +120,8 @@ For directories, size represents the number of entries in that directory.`, }, "read_file": { Tool: openai.Tool{Type: "function", Function: openai.FunctionDefinition{ - Name: "read_file", - Description: `Read the contents of a text file relative to the current working directory. - -Each line of the file is prefixed with its line number and a tabs (\t) to make -it make it easier to see which lines to change for other modifications. - -Example: -{ - "message": "success", // if successful, or a different message indicating failure - "result": "1\tthe contents\n2\tof the file\n" -}`, + Name: "read_file", + Description: READ_FILE_DESCRIPTION, Parameters: FunctionParameters{ Type: "object", Properties: map[string]FunctionParameter{ @@ -114,13 +147,8 @@ Example: }, "write_file": { Tool: openai.Tool{Type: "function", Function: openai.FunctionDefinition{ - Name: "write_file", - Description: `Write the provided contents to a file relative to the current working directory. - -Result is returned as JSON in the following format: -{ - "message": "success", // if successful, or a different message indicating failure -}`, + Name: "write_file", + Description: WRITE_FILE_DESCRIPTION, Parameters: FunctionParameters{ Type: "object", Properties: map[string]FunctionParameter{ @@ -158,26 +186,8 @@ Result is returned as JSON in the following format: }, "modify_file": { Tool: openai.Tool{Type: "function", Function: openai.FunctionDefinition{ - Name: "modify_file", - Description: `Perform complex line-based modifications to a file. - -Line ranges are inclusive. If 'start_line' is specified but 'end_line' is not, -'end_line' gets set to the last line of the file. - -To replace or remove a single line, *set start_line and end_line to the same value* - -Examples: -* Insert the lines "helloworld" at line 10, preserving other content: - {"path": "myfile", "operation": "insert_before", "start_line": 10, "content": "hello\nworld"} - -* Remove lines 45 up to and including 54: - {"path": "myfile", "operation": "remove", "start_line": 45, "end_line": 54} - -* Replace content from line 10 to 25: - {"path": "myfile", "operation": "replace", "start_line": 10, "end_line": 25, "content": "i\nwas\nhere"} - -* Replace contents of entire the file: - {"path": "myfile", "operation": "replace", "start_line": 0, "content": "i\nwas\nhere"}`, + Name: "modify_file", + Description: MODIFY_FILE_DESCRIPTION, Parameters: FunctionParameters{ Type: "object", Properties: map[string]FunctionParameter{