Skip to content
Back to skills

Check Eval

ASecurity

Evaluates a model checkpoint using HF Trainer.evaluate(), lm-evaluation-harness, or a custom eval script. Loads the checkpoint, runs evaluation, parses results, computes deltas against a baseline, and produces a structured results report. Run this automatically after training completes or a checkpoint is saved to gate progression to the next lifecycle stage.

  • 3 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added May 27, 2026
data-aigo

Works with

  • cli

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned May 27, 2026

npx -y skills add lawwu/agentic-ml-plugin --skill check-eval --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Check Eval?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Check Eval
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/lawwu-check-eval/badge)](https://www.skillsdirectory.com/skills/lawwu-check-eval)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: check-eval
description: Evaluates a model checkpoint using HF Trainer.evaluate(), lm-evaluation-harness, or a custom eval script. Loads the checkpoint, runs evaluation, parses results, computes deltas against a baseline, and produces a structured results report. Run this automatically after training completes or a checkpoint is saved to gate progression to the next lifecycle stage.
argument-hint: "[checkpoint-path | hf-model] [--task harness-task | --eval-script path] [--baseline CHECKPOINT_OR_RESULTS] [--split validation|test] [--batch-size N] [--device cuda|cpu|auto] [--dtype float16|bfloat16|float32]"
---

# Check Eval

Run structured evaluation on a model checkpoint and produce a results report with baseline comparison.

## Invocation

Arguments (`$ARGUMENTS`) are interpreted as:

- `path/to/checkpoint/` — local HuggingFace checkpoint directory
- `owner/model-name` — HuggingFace Hub model ID
- `--task TASK` — lm-evaluation-harness task(s), comma-separated (e.g., `hellaswag,arc_easy`)
- `--eval-script path/to/eval.py` — custom evaluation script to run
- `--baseline PATH_OR_FILE` — baseline checkpoint or JSON results file for delta comparison
- `--split` — dataset split to evaluate on (default: `validation` for HF Trainer, task-defined for harness)
- `--batch-size N` — per-device batch size (default: auto-detect from checkpoint config)
- `--device` — evaluation device (default: `auto`)
- `--dtype` — model dtype (default: `bfloat16` if supported, else `float32`)
- `--limit N` — max examples per task (useful for quick smoke tests)

Target: `$ARGUMENTS`

## Your responsibilities

### 1. Identify the evaluation strategy

Determine which evaluation path to use based on arguments:

- **HF Trainer.evaluate()**: checkpoint dir + no `--task` flag → use `Trainer.evaluate()` or `pipeline` on the eval split; see [references/hf-eval-patterns.md](references/hf-eval-patterns.md)
- **lm-evaluation-harness**: `--task` flag provided → compose `lm_eval` CLI command; see [references/harness-reference.md](references/harness-reference.md)
- **Custom script**: `--eval-script` flag → run the script with appropriate args; capture JSON output
- **Ambiguous**: ask the user which strategy before proceeding

### 2. Validate the checkpoint

Before running evaluation:

- Confirm the checkpoint directory exists and contains `config.json` + weights
- Check model architecture matches the task requirements
- Verify the tokenizer is present (for text models)
- Confirm device and dtype are compatible with the model size (estimate memory)
- Report estimated VRAM requirement

If the checkpoint is invalid or incomplete, stop and report the specific missing file.

### 3. Compose and run the evaluation command

For HF Trainer-based eval: write a short eval script using patterns from [references/hf-eval-patterns.md](references/hf-eval-patterns.md).

For lm-evaluation-harness: compose the `lm_eval` CLI command from [references/harness-reference.md](references/harness-reference.md). Always include:

- `--output_path` for reproducible result capture
- `--log_samples` for task-level debug
- `--batch_size auto` unless `--batch-size` is specified

Show the exact command before running it.

### 4. Parse and structure results

After evaluation completes:

- Extract metric names and values from the output JSON or stdout
- Compute deltas vs. baseline if `--baseline` is provided (use [scripts/compare-results.sh](scripts/compare-results.sh))
  - When `--baseline` points to a `build-baseline.json` artifact, extract `best_score` as the comparison floor; the non-ML baseline score is the minimum bar the ML model must exceed
- Flag any metrics that regressed vs. baseline
- Report per-task and aggregate results

### 5. Report format

```text
Eval Report
===========
Checkpoint: <path or model ID>
Strategy: <HF Trainer | lm-evaluation-harness | custom>
Device: <device>  |  Dtype: <dtype>
Tasks: <task list or eval split>
Baseline: <baseline path or none>

Results:
| Task / Metric     | Score    | Baseline | Delta  | Status   |
|-------------------|----------|----------|--------|----------|
| <task>/<metric>   | <value>  | <value>  | <±Δ>  | ✓ / ↓ / new |

Summary:
- Best gain: <metric> +Δ
- Improvement over non-ML baseline: +X.X pp (when build-baseline.json is the --baseline)
- Regressions: <metric> -Δ (investigate)
- New metrics (no baseline): <list>

Notes:
- <any warnings about truncation, OOM, skipped examples, etc.>

Decision: GO | NO-GO | CONDITIONAL
Confidence: high|medium|low
```

`GO`: all metrics meet thresholds, no regressions vs. baseline.
`CONDITIONAL`: minor regressions on secondary metrics; primary metric threshold met.
`NO-GO`: primary metric threshold not met or checkpoint invalid.

If no baseline:

```text
Results:
| Task / Metric   | Score   |
|-----------------|---------|
| ...             | ...     |
```

### 6. Fix policy

Apply without approval:

- Running read-only eval commands
- Creating temporary eval scripts that do not modify the checkpoint

Require user approval before:

- Modifying the checkpoint (merging adapters, quantizing, etc.)
- Uploading results to W&B, MLflow, or HuggingFace Hub
- Running on the test split (prefer validation; test should be held out)

### 7. Stop conditions

Stop when:

- A complete results report is delivered
- The checkpoint is invalid and the specific error is reported
- The evaluation fails and the failure is diagnosed (OOM, missing dependency, etc.)
- User decision is required (e.g., ambiguous eval strategy, test split usage)

## Quick heuristics

- Eval loss much higher than train loss → overfitting, wrong eval split, or data contamination
- Harness score below random baseline → label format mismatch or wrong task name
- Memory OOM during eval but not training → eval batch size inherits train batch size; set `per_device_eval_batch_size` explicitly
- Different scores on same data across runs → generation temperature > 0 or batch-size-dependent normalization; use `--batch_size 1` to isolate
- `lm_eval` task name typo → harness exits with `ValueError: no tasks matching`; check `uv run lm_eval --list-tasks`

## Examples

```text
/ml-skills:check-eval ./runs/llama-ft/checkpoint-5000 --task hellaswag,arc_easy,mmlu --dtype bfloat16 --baseline ./runs/llama-ft/checkpoint-2500

Checkpoint: ./runs/llama-ft/checkpoint-5000 (LlamaForCausalLM, 7B params)
Strategy: lm-evaluation-harness
Command:
  uv run lm_eval --model hf \
    --model_args pretrained=./runs/llama-ft/checkpoint-5000,dtype=bfloat16 \
    --tasks hellaswag,arc_easy,mmlu \
    --batch_size auto \
    --output_path ./eval_results/checkpoint-5000.json \
    --log_samples

[Running... 14m 32s]

Eval Report
===========
Checkpoint: ./runs/llama-ft/checkpoint-5000
Baseline:   ./runs/llama-ft/checkpoint-2500

Results:
| Task / Metric      | Score  | Baseline | Delta  | Status |
|--------------------|--------|----------|--------|--------|
| hellaswag/acc_norm | 0.7823 | 0.7441   | +0.038 | ✓      |
| arc_easy/acc_norm  | 0.7912 | 0.7905   | +0.001 | ✓      |
| mmlu/acc            | 0.5231 | 0.5398   | -0.017 | ↓      |

Summary:
- Best gain: hellaswag +3.8pp
- Regressions: mmlu -1.7pp (investigate — may need more training or MMLU-specific tuning)
```

```text
/ml-skills:check-eval ./runs/bert-classifier/checkpoint-final --split validation --batch-size 32

Checkpoint: ./runs/bert-classifier/checkpoint-final (BertForSequenceClassification)
Strategy: HF Trainer.evaluate()

Eval Report
===========
| Metric    | Score  |
|-----------|--------|
| eval_loss | 0.2341 |
| eval_f1   | 0.8812 |
| eval_acc  | 0.9103 |

No baseline provided. Use --baseline to compute deltas.
```

## Additional resources

- [references/hf-eval-patterns.md](references/hf-eval-patterns.md) — Loading and evaluating HF model types, precision, device mapping
- [references/harness-reference.md](references/harness-reference.md) — lm-evaluation-harness CLI reference, tasks, output parsing
- [scripts/compare-results.sh](scripts/compare-results.sh) — JSON result diff with delta formatting

### JSON artifact

Write `check-eval.json` to `--out-dir` (or `./` if invoked standalone) following the schema in [../../references/schemas.md](../../references/schemas.md). Use vocabulary from [../../references/vocabulary.md](../../references/vocabulary.md).

Key fields to populate:

- `decision`: `GO` / `NO-GO` / `CONDITIONAL`
- `results`: one entry per task/metric with score, baseline, delta, and regressed flag
- `regressions`: list of metric names that regressed vs. baseline
- `findings`: one entry per regression (severity `high`) and per warning/note (severity `medium` or `low`)

Files in this skill

  • SKILL.md8.5 KB
  • references/harness-reference.md5.9 KB
  • references/hf-eval-patterns.md7.1 KB
  • scripts/compare-results.sh4.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.