X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/4a605fa39078354654ae648e489c117c7a445197..f2d227db9c3b556c7b0e1cfe735ccc54311850e5:/prompt.go?ds=sidebyside diff --git a/prompt.go b/prompt.go index e48c5a6..b536a36 100644 --- a/prompt.go +++ b/prompt.go @@ -123,9 +123,9 @@ func prompt(name, instructions string) string { return text + instructionsHeading + instructions } -// agentTools returns the function tools of every call: zoom and date. A -// compaction sends them too and never calls them, because a change of the -// tools ends the shared prompt cache. +// agentTools returns the function tools of every call: zoom, date, shell, +// read, write, and edit. A compaction sends them too and never calls them, +// because a change of the tools ends the shared prompt cache. func agentTools() []Tool { return []Tool{ { @@ -147,6 +147,45 @@ func agentTools() []Tool { }), Strict: true, }, + { + Type: "function", + Name: "shell", + Description: "Run a command with bash, as the user, in the working directory, with no input. Gives its output and error output, and its exit status when it fails.", + Parameters: objectSchema(map[string]any{ + "command": stringSchema("The bash command."), + }), + Strict: true, + }, + { + Type: "function", + Name: "read", + Description: "Read a text file.", + Parameters: objectSchema(map[string]any{ + "path": stringSchema("The file, absolute or relative to the working directory."), + }), + Strict: true, + }, + { + Type: "function", + Name: "write", + Description: "Write a text file whole, replacing it when it exists. Makes the missing directories.", + Parameters: objectSchema(map[string]any{ + "path": stringSchema("The file, absolute or relative to the working directory."), + "text": stringSchema("The whole new content."), + }), + Strict: true, + }, + { + Type: "function", + Name: "edit", + Description: "Replace the one occurrence of old in a text file with new.", + Parameters: objectSchema(map[string]any{ + "path": stringSchema("The file, absolute or relative to the working directory."), + "old": stringSchema("The exact text to replace. It must occur once in the file."), + "new": stringSchema("The text that replaces old."), + }), + Strict: true, + }, } } @@ -175,3 +214,11 @@ func integerSchema(description string) map[string]any { "description": description, } } + +// stringSchema returns the JSON schema of a string. +func stringSchema(description string) map[string]any { + return map[string]any{ + "type": "string", + "description": description, + } +}