Skip to content
Back to skills

Evals

ASecurity

Guide for evaluation — inline evaluators, Inspect AI integration, and custom evaluators for measuring training progress. Use when the user asks about evaluation, metrics, benchmarks, or how to measure model quality during training.

  • 5 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 1, 2026
devopspythonapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned September 1, 2026

npx -y skills add uiuc-kang-lab/rlvr_generalization_bounds --skill evals --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Evals?

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

Security grade badge for Evals
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/uiuc-kang-lab-evals/badge)](https://www.skillsdirectory.com/skills/uiuc-kang-lab-evals)

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: evals
description: Guide for evaluation — inline evaluators, Inspect AI integration, and custom evaluators for measuring training progress. Use when the user asks about evaluation, metrics, benchmarks, or how to measure model quality during training.
---

# Evaluation

Training scripts support inline evaluation at configurable intervals. The cookbook provides several evaluator patterns.

## Reference

Read these for details:
- `docs/evals.mdx` — Evaluation guide
- `tinker_cookbook/supervised/train.py` — SL evaluator integration (search for `evaluator_builders`)
- `tinker_cookbook/rl/train.py` — RL evaluator integration
- `tinker_cookbook/recipes/chat_sl/train.py` — Example with Inspect AI evaluators

## Evaluator types

### SL evaluators
SL training supports two evaluator tiers:

```python
config = supervised_train.Config(
    evaluator_builders=[...],              # Run every eval_every steps
    infrequent_evaluator_builders=[...],   # Run every infrequent_eval_every steps
    eval_every=8,
    infrequent_eval_every=50,
)
```

### RL evaluators
RL training uses `SamplingClientEvaluator`:

```python
async def my_evaluator(sampling_client: SamplingClient) -> dict[str, float]:
    # Generate samples, compute metrics
    return {"accuracy": 0.85, "avg_length": 150}

config = rl_train.Config(
    evaluator_builders=[my_evaluator],
    eval_every=20,
)
```

### RL test set evaluator
Evaluates the policy on a held-out test set of environments:

```python
# Built into rl/train.py via test_dataset from RLDatasetBuilder
# RLDatasetBuilder.__call__() returns (train_dataset, test_dataset)
```

## Inspect AI integration

The cookbook integrates with [Inspect AI](https://inspect.ai) for standard benchmarks:

```python
from tinker_cookbook.eval.inspect_utils import InspectAPIFromTinkerSampling

# Create an Inspect evaluator that uses Tinker sampling
evaluator = InspectAPIFromTinkerSampling(
    task="gsm8k",          # Inspect task name
    renderer_name=renderer_name,
    model_name=model_name,
    include_reasoning=True,  # Include reasoning traces
)
```

See `tinker_cookbook/recipes/chat_sl/train.py` for a working example with GSM8K and IFEval.

## Custom evaluators

### Pattern 1: Sampling-based evaluation

```python
async def eval_math(sampling_client: SamplingClient) -> dict[str, float]:
    correct = 0
    total = 100
    for problem in test_problems:
        response = sampling_client.sample(
            prompt=problem.prompt,
            num_samples=1,
            sampling_params=SamplingParams(max_tokens=256, temperature=0.0),
        )
        answer = parse_answer(response.sequences[0].tokens)
        if answer == problem.expected:
            correct += 1
    return {"math_accuracy": correct / total}
```

### Pattern 2: NLL-based evaluation

Compute negative log-likelihood on a held-out dataset without generating text. See `tinker_cookbook/supervised/train.py` for the built-in NLL evaluator.

## Metrics logging

```python
from tinker_cookbook.utils.ml_log import log_metrics

log_metrics({"train/loss": 0.5, "eval/accuracy": 0.85}, step=100)
```

## Common pitfalls
- Evaluators run inline during training — keep them fast to avoid stalling the training loop
- Use `infrequent_evaluator_builders` for expensive evals (large benchmarks)
- RL evaluators receive a SamplingClient — create completers from it if needed
- For Inspect AI, set `include_reasoning=True` to capture thinking traces

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.