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
}