From 619b19cb46061c89aa4a837ed1e6bfea76644bd8 Mon Sep 17 00:00:00 2001 From: Grail Finder Date: Sat, 14 Mar 2026 18:10:34 +0300 Subject: Enha: avoid posting full help on wrong command --- tools.go | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 59 insertions(+), 11 deletions(-) (limited to 'tools.go') diff --git a/tools.go b/tools.go index ad245a2..3b6144f 100644 --- a/tools.go +++ b/tools.go @@ -45,7 +45,12 @@ Your current tools: { "name":"run", "args": ["command"], -"when_to_use": "main tool: run shell, memory, git, todo. Use run \"help\" for all commands, run \"help \" for specific help. Examples: run \"ls -la\", run \"help\", run \"help memory\", run \"git status\", run \"memory store foo bar\"" +"when_to_use": "Main tool for file operations, shell commands, memory, git, and todo. Use run \"help\" for all commands. Examples: run \"ls -la\", run \"help\", run \"mkdir -p foo/bar\", run \"cat file.txt\", run \"view_img image.png\", run \"git status\", run \"memory store foo bar\", run \"todo create task\", run \"grep pattern file\", run \"cd /path\", run \"pwd\", run \"find . -name *.txt\", run \"file image.png\", run \"head file\", run \"tail file\", run \"wc -l file\", run \"sort file\", run \"uniq file\", run \"sed 's/old/new/' file\", run \"echo text\", run \"go build ./...\", run \"time\", run \"stat file\", run \"cp src dst\", run \"mv src dst\", run \"rm file\"" +}, +{ +"name":"view_img", +"args": ["file"], +"when_to_use": "View an image file and get it displayed in the conversation for visual analysis. Supports: png, jpg, jpeg, gif, webp, svg. Example: view_img /path/to/image.png or view_img image.png" }, { "name":"websearch", @@ -70,7 +75,7 @@ Your current tools: { "name":"browser_agent", "args": ["task"], -"when_to_use": "autonomous browser automation for complex tasks" +"when_to_use": "autonomous browser automation for complex multi-step tasks like login, form filling, scraping" } ] @@ -78,25 +83,25 @@ To make a function call return a json object within __tool_call__ tags; __tool_call__ { -"name":"recall", -"args": {"topic": "Adam's number"} +"name":"run", +"args": {"command": "ls -la /home"} } __tool_call__ __tool_call__ { -"name":"execute_command", -"args": {"command": "ls", "args": "-la /home"} +"name":"view_img", +"args": {"file": "screenshot.png"} } __tool_call__ -Tool call is addressed to the tool agent, avoid sending more info than tool call itself, while making a call. +Tool call is addressed to the tool agent, avoid sending more info than the tool call itself, while making a call. When done right, tool call will be delivered to the tool agent. tool agent will respond with the results of the call. tool: -under the topic: Adam's number is stored: -559-996 +total 1234 +drwxr-xr-x 2 user user 4096 Jan 1 12:00 . After that you are free to respond to the user. ` @@ -531,8 +536,8 @@ func runCmd(args map[string]string) []byte { // git has its own whitelist in FsGit return []byte(tools.FsGit(rest, "")) default: - // Unknown subcommand - return help to remind user of available commands - return []byte(getHelp(nil)) + // Unknown subcommand - tell user to run help tool + return []byte("[error] command not allowed. Run 'help' tool to see available commands.") } } @@ -1176,6 +1181,29 @@ func todoDelete(args map[string]string) []byte { return jsonResult } +func viewImgTool(args map[string]string) []byte { + file, ok := args["file"] + if !ok || file == "" { + msg := "file not provided to view_img tool" + logger.Error(msg) + return []byte(msg) + } + result := tools.FsViewImg([]string{file}, "") + return []byte(result) +} + +func helpTool(args map[string]string) []byte { + command, ok := args["command"] + var rest []string + if ok && command != "" { + parts := strings.Fields(command) + if len(parts) > 1 { + rest = parts[1:] + } + } + return []byte(getHelp(rest)) +} + func summarizeChat(args map[string]string) []byte { if len(chatBody.Messages) == 0 { return []byte("No chat history to summarize.") @@ -1379,6 +1407,8 @@ var fnMap = map[string]fnSig{ "websearch_raw": websearchRaw, "read_url": readURL, "read_url_raw": readURLRaw, + "view_img": viewImgTool, + "help": helpTool, // Unified run command "run": runCmd, "summarize_chat": summarizeChat, @@ -1980,6 +2010,24 @@ var baseTools = []models.Tool{ }, }, }, + // help + models.Tool{ + Type: "function", + Function: models.ToolFunc{ + Name: "help", + Description: "List all available commands. Use this to discover what commands are available when unsure.", + Parameters: models.ToolFuncParams{ + Type: "object", + Required: []string{}, + Properties: map[string]models.ToolArgProps{ + "command": models.ToolArgProps{ + Type: "string", + Description: "optional: get help for specific command (e.g., 'help memory')", + }, + }, + }, + }, + }, // run - unified command models.Tool{ Type: "function", -- cgit v1.2.3