Enha: avoid posting full help on wrong command
This commit is contained in:
70
tools.go
70
tools.go
@@ -45,7 +45,12 @@ Your current tools:
|
|||||||
{
|
{
|
||||||
"name":"run",
|
"name":"run",
|
||||||
"args": ["command"],
|
"args": ["command"],
|
||||||
"when_to_use": "main tool: run shell, memory, git, todo. Use run \"help\" for all commands, run \"help <cmd>\" 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",
|
"name":"websearch",
|
||||||
@@ -70,7 +75,7 @@ Your current tools:
|
|||||||
{
|
{
|
||||||
"name":"browser_agent",
|
"name":"browser_agent",
|
||||||
"args": ["task"],
|
"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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
</tools>
|
</tools>
|
||||||
@@ -78,25 +83,25 @@ To make a function call return a json object within __tool_call__ tags;
|
|||||||
<example_request>
|
<example_request>
|
||||||
__tool_call__
|
__tool_call__
|
||||||
{
|
{
|
||||||
"name":"recall",
|
"name":"run",
|
||||||
"args": {"topic": "Adam's number"}
|
"args": {"command": "ls -la /home"}
|
||||||
}
|
}
|
||||||
__tool_call__
|
__tool_call__
|
||||||
</example_request>
|
</example_request>
|
||||||
<example_request>
|
<example_request>
|
||||||
__tool_call__
|
__tool_call__
|
||||||
{
|
{
|
||||||
"name":"execute_command",
|
"name":"view_img",
|
||||||
"args": {"command": "ls", "args": "-la /home"}
|
"args": {"file": "screenshot.png"}
|
||||||
}
|
}
|
||||||
__tool_call__
|
__tool_call__
|
||||||
</example_request>
|
</example_request>
|
||||||
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.
|
When done right, tool call will be delivered to the tool agent. tool agent will respond with the results of the call.
|
||||||
<example_response>
|
<example_response>
|
||||||
tool:
|
tool:
|
||||||
under the topic: Adam's number is stored:
|
total 1234
|
||||||
559-996
|
drwxr-xr-x 2 user user 4096 Jan 1 12:00 .
|
||||||
</example_response>
|
</example_response>
|
||||||
After that you are free to respond to the user.
|
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
|
// git has its own whitelist in FsGit
|
||||||
return []byte(tools.FsGit(rest, ""))
|
return []byte(tools.FsGit(rest, ""))
|
||||||
default:
|
default:
|
||||||
// Unknown subcommand - return help to remind user of available commands
|
// Unknown subcommand - tell user to run help tool
|
||||||
return []byte(getHelp(nil))
|
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
|
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 {
|
func summarizeChat(args map[string]string) []byte {
|
||||||
if len(chatBody.Messages) == 0 {
|
if len(chatBody.Messages) == 0 {
|
||||||
return []byte("No chat history to summarize.")
|
return []byte("No chat history to summarize.")
|
||||||
@@ -1379,6 +1407,8 @@ var fnMap = map[string]fnSig{
|
|||||||
"websearch_raw": websearchRaw,
|
"websearch_raw": websearchRaw,
|
||||||
"read_url": readURL,
|
"read_url": readURL,
|
||||||
"read_url_raw": readURLRaw,
|
"read_url_raw": readURLRaw,
|
||||||
|
"view_img": viewImgTool,
|
||||||
|
"help": helpTool,
|
||||||
// Unified run command
|
// Unified run command
|
||||||
"run": runCmd,
|
"run": runCmd,
|
||||||
"summarize_chat": summarizeChat,
|
"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
|
// run - unified command
|
||||||
models.Tool{
|
models.Tool{
|
||||||
Type: "function",
|
Type: "function",
|
||||||
|
|||||||
Reference in New Issue
Block a user