Ryanhub - file viewer
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
}