wavetermdev/waveterm · error

invalid input format

Error message

invalid input format

What it means

This error comes from the ToolAnyCallback of a sum-style AI tool in tools.go. The callback type-asserts its raw `input any` argument to map[string]any; if the runtime input is not a JSON object (map), the assertion fails and this error is returned to the LLM caller. It guards against malformed tool invocations before any parameter extraction.

Solutions

  1. Ensure the tool call arguments are a JSON object wrapping the array, e.g. {"values": [1,2,3]} instead of [1,2,3]
  2. Check the model/SDK version; newer models with strict tool-calling honor the declared schema's additionalProperties/type constraints better
  3. If invoking programmatically, pass a map[string]any (or object that re-marshals to a JSON object), not a slice or scalar

Example fix

// before
anySum([1, 2, 3])
// after
anySum({"values": [1, 2, 3]})
Defensive patterns

Strategy: type-guard

Validate before calling

if v, ok := raw.(map[string]any); !ok { return fmt.Errorf("tool input must be a JSON object") }; if _, ok := v["values"]; !ok { return fmt.Errorf("missing values") }; if _, ok := v["values"].([]any); !ok { return fmt.Errorf("values must be an array") }

Type guard

func asObjectMap(input any) (map[string]any, bool) { m, ok := input.(map[string]any); return m, ok }

Try / catch

result, err := tool.Call(input); if err != nil { if strings.Contains(err.Error(), "invalid input format") { /* re-invoke model with corrected schema example */ } return err }

Prevention

When it happens

Trigger: The AI/LLM invokes the tool with input that is not a JSON object — e.g. a bare array, string, number, or nil is passed as the tool arguments instead of an object like {"values":[1,2,3]}.

Common situations: Model-generated tool call arguments that are JSON arrays or strings instead of objects; older model versions ignoring the JSON schema's type:object constraint; a caller invoking the tool programmatically passing a non-map value; JSON deserialization layers that hand raw scalars through.

Related errors


AI-assisted analysis of wavetermdev/waveterm@a4447c1563 (2026-09-01). Data as JSON: /api/errors/b65232e2a2bbcf9a. Report an issue: GitHub.

Appendix: source

Thrown at pkg/aiusechat/tools.go:289

		Strict:      true,
		InputSchema: map[string]any{
			"type": "object",
			"properties": map[string]any{
				"values": map[string]any{
					"type": "array",
					"items": map[string]any{
						"type": "integer",
					},
					"description": "Array of numbers to add together",
				},
			},
			"required":             []string{"values"},
			"additionalProperties": false,
		},
		ToolAnyCallback: func(input any, toolUseData *uctypes.UIMessageDataToolUse) (any, error) {
			inputMap, ok := input.(map[string]any)
			if !ok {
				return nil, fmt.Errorf("invalid input format")
			}

			valuesInterface, ok := inputMap["values"]
			if !ok {
				return nil, fmt.Errorf("missing values parameter")
			}

			valuesSlice, ok := valuesInterface.([]any)
			if !ok {
				return nil, fmt.Errorf("values must be an array")
			}

			if len(valuesSlice) == 0 {
				return 0, nil
			}

			sum := 0
			for i, val := range valuesSlice {

View on GitHub (pinned to a4447c1563)