filename:
assistant/agent/manual_tool.go
branch:
main
back to repo
package agent
import (
"context"
"encoding/json"
"fmt"
"strings"
"time"
"assistant/llm"
)
// ToolListText returns a plain-text, human-oriented list of tools, arguments, and example /tool lines.
func (a *Agent) ToolListText() string {
if a == nil || len(a.reg) == 0 {
return "No tools are registered."
}
return formatToolListHuman(a.reg)
}
// RunToolManual runs a single tool with JSON object arguments (same behavior as model-invoked tools).
func (a *Agent) RunToolManual(ctx context.Context, name string, argsJSON string) (string, error) {
if a == nil {
return "", fmt.Errorf("agent not configured")
}
args := strings.TrimSpace(argsJSON)
if args == "" {
args = "{}"
}
if !json.Valid([]byte(args)) {
return "", fmt.Errorf("tool arguments must be valid JSON")
}
var call llm.ToolCall
call.ID = "manual"
call.Type = "function"
call.Function.Name = name
call.Function.Arguments = json.RawMessage(args)
start := time.Now()
out, err := runTool(ctx, a.reg, call)
if a.tel != nil {
a.tel.ObserveTool(name, time.Since(start))
}
return out, err
}