Ryanhub - file viewer
filename: agent/toolcall.go
branch: main
back to repo
package agent

import (
	"context"
	"encoding/json"
	"fmt"

	"assistant/llm"
	"assistant/tools"
)

func normalizeToolArgs(raw json.RawMessage) json.RawMessage {
	if len(raw) == 0 || string(raw) == "null" {
		return json.RawMessage("{}")
	}
	var s string
	if err := json.Unmarshal(raw, &s); err == nil && s != "" {
		return json.RawMessage(s)
	}
	return raw
}

func runTool(ctx context.Context, reg tools.Registry, call llm.ToolCall) (string, error) {
	name := call.Function.Name
	t, ok := reg[name]
	if !ok {
		return "", fmt.Errorf("unknown tool %q", name)
	}
	args := normalizeToolArgs(call.Function.Arguments)
	out, err := t.Run(ctx, args)
	if err != nil {
		return fmt.Sprintf("error: %v", err), nil
	}
	return out, nil
}