#129

Support for eval dirs more than one level deep

Openunjustopened 6mo ago

Problem

Eval fixtures can be discovered with nested paths under evals/ (e.g. ui-development/design-system/layout), and saveResults correctly writes results under a matching nested directory tree beneath each timestamp.

However - housekeep and scanReusableResults only list the immediate children of the timestamp directory and treat each name as the full eval id. For nested evals, the first segment (e.g. ui-development) is not the eval result root: summary.json lives deeper (e.g. …/ui-development/design-system/layout/summary.json).

My project organization:

evals/
  
  ui-development/
    design-system/
        layout-props/
          PROMPT.md

So fixture / eval names look like ui-development/design-system/layout-props

On disk, saveResults produces results/<experiment>/<model>/<timestamp>/

  ui-development/design-system/layout-props/
    summary.json
    run-1/
      result.json
      transcript.json
      …

But housekeep only does readdir on /, gets e.g. ui-development, and then checks isComplete(join(tsDir, 'ui-development')) to look for …/ui-development/summary.json which is missing so it returns false.

<timestamp>/ui-development/summary.json → does not exist → treated as incomplete → rmSync('/ui-development', { recursive: true }) wipes the entire nested tree.

Proposal

Under each timestamp, discover eval result directories by walking until directories that contain summary.json (or equivalent), and use relpath from the timestamp dir as the eval key so it matches fingerprints and saveResults. Apply the same fix to scanReusableResults in results.js, which uses the same one-level readdir + join(tsDir, evalDir, 'summary.json') pattern.

Environment

@vercel/agent-eval 0.14.0 (npm) Nested evals/ as above; run-all with classifier enabled reproduces post-run deletion after housekeep.

Activity

0

No activity yet.