JuliusBrussee/caveman · error

cachebench: Hugging Face rows root must be object

Error message

cachebench: Hugging Face rows root must be object

What it means

Error "cachebench: Hugging Face rows root must be object" thrown in JuliusBrussee/caveman.

Source

Thrown at cacheengine/cachebench/corpus.go:231

		row, err := validateCorpusWire(wire, line-1, limits)
		if err != nil {
			return nil, fmt.Errorf("cachebench: corpus line %d: %w", line, err)
		}
		if err := appendCorpusRow(&rows, sessions, &retainedBytes, row, limits); err != nil {
			return nil, fmt.Errorf("cachebench: corpus line %d: %w", line, err)
		}
	}
	if err := scanner.Err(); err != nil {
		return nil, fmt.Errorf("cachebench: read corpus: %w", err)
	}
	return rows, nil
}

func readHFRows(reader io.Reader, limits CorpusLimits) ([]CorpusRow, error) {
	decoder := json.NewDecoder(reader)
	first, err := decoder.Token()
	if err != nil || first != json.Delim('{') {
		return nil, errors.New("cachebench: Hugging Face rows root must be object")
	}
	rows := make([]CorpusRow, 0)
	sessions := map[string]bool{}
	var retainedBytes int64
	foundRows := false
	rootKeys := map[string]bool{}
	for decoder.More() {
		keyToken, err := decoder.Token()
		if err != nil {
			return nil, fmt.Errorf("cachebench: read Hugging Face rows key: %w", err)
		}
		key, ok := keyToken.(string)
		if !ok {
			return nil, errors.New("cachebench: invalid Hugging Face rows key")
		}
		if rootKeys[key] {
			return nil, fmt.Errorf("cachebench: duplicate Hugging Face field %q", key)
		}

View on GitHub (pinned to 27d5a3981a)

Solutions

  1. The Hugging Face rows response must be a JSON object at the root.

When it happens

Trigger: Thrown at cacheengine/cachebench/corpus.go:231 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of JuliusBrussee/caveman@27d5a3981a (2026-08-15). Data as JSON: /api/errors/18a7b2d7ac02c699. Report an issue: GitHub.