Skip to main content
Telescope runs evaluations during training to track model performance over time. Evals use dedicated inference servers, run with their own generation parameters, and log results separately from training metrics.

Configuration

Add evals to your training config under the evals key:
Each eval entry supports:

Eval servers

Evals run on dedicated inference servers that are reserved from the inference pool:
When an eval triggers, these servers are temporarily drained of training requests, run the eval, then resume training work. Setting eval_num_servers: 0 disables periodic evals during training.

Baseline and final evals

In addition to periodic evals during training, Telescope can run evals before the first training step (baseline) and after the last step (final):
When eval_start_end_use_all_servers is true, baseline and final evals use every inference server (not just the dedicated eval servers), since no training is happening at those points.

Eval sources

When Telescope resolves an eval name, it checks two locations in order:
  1. Dedicated evalsrc/telescope/evals/<name>/eval.py
  2. Environment fallbacksrc/telescope/environments/<name>/environment.py
This means any training environment can also be used as an eval by referencing its name. Dedicated evals exist for benchmarks that don’t have a corresponding training environment.

Built-in evals

Telescope ships with several standalone evals that can be used out of the box: math500, aime_2024, and aime_2025 require math_verify (uv add math-verify). gpqa_diamond may require HuggingFace authentication (huggingface-cli login).

Building a dedicated eval

Create a folder under src/telescope/evals/ with an eval.py file. The simplest approach is wrapping an existing environment:
Setting environment_name gives the eval access to the environment’s prompt formatting, reward function, and compute_eval_metrics. You only need to override what you want to change. For fully standalone evals (no training environment), leave environment_name as None and implement everything directly:

pass@k

For tasks where you want to measure whether the model can solve a problem in k attempts, configure pass_k:
  • pass@k — probability that at least 1 of k completions is correct (unbiased estimator from Chen et al., 2021)
  • pass^k — probability that all k completions are correct
The eval runner generates max(k) completions per sample and computes the pass@k estimates from those.

Standalone eval driver

For evaluating checkpoints outside of training, Telescope includes a standalone eval driver that loads checkpoints, spins up vLLM inference, runs evals, and logs results to Weights & Biases. It is config-file-driven, like training:
You can override any config parameter from the command line:
The standalone driver converts native checkpoints to HuggingFace format on the fly (if not already converted), evaluates each checkpoint in step order, and uploads results to the specified W&B run.