Configuration

July 1, 2026 · View on GitHub

Overview

Every eval config has two parts:

# 1. TerminalEnv — HOW to run each task (model, agent, runtime)
terminal_env:
  model:    { ... }    # which LLM to use
  agent:    { ... }    # prompt, tool list, iteration limits
  runtime:  { ... }    # local docker or remote slot pool
  env:      { ... }    # reward function, timeouts

# 2. Eval loop — WHAT to run (dataset, parallelism, output)
n_trajs: 8
workers: 3
dataset: seta-env-v2
output_dir: outputs/eval

Between runs you typically only change model and dataset. Everything else stays the same.

What to change

Switch model

python scripts/evaluation/eval.py \
    --config scripts/evaluation/configs/eval_default.yaml \
    terminal_env.model.model_type=Qwen/Qwen3-32B \
    terminal_env.model.url=http://localhost:30000/v1

Or edit the YAML directly:

terminal_env:
  model:
    model_type: Qwen/Qwen3-32B          # ← change this
    url: http://localhost:30000/v1       # ← and this

Switch dataset

Use any label from seta_env/dataset/datasets.yaml. Auto-downloads on first use.

python scripts/evaluation/eval.py \
    --config scripts/evaluation/configs/eval_default.yaml \
    dataset=terminal-bench-2.0

Or use a local path:

dataset=/data/my-custom-dataset

Switch between local Docker and remote slot pool

Two example configs are provided — identical except for runtime:

ConfigRuntimeWhen to use
eval_default.yamldocker (local)Single machine, no setup needed
eval_remote.yamlremote_docker (slot pool)Multiple nodes, requires slot pool service running

The only difference:

# eval_default.yaml (local)
runtime:
  env_type: docker

# eval_remote.yaml (remote)
runtime:
  env_type: remote_docker
  scheduler_url: "http://127.0.0.1:8000"
  node_api_key: harbor-node-dev-key

Or override on the command line without a separate config:

python scripts/evaluation/eval.py \
    --config scripts/evaluation/configs/eval_default.yaml \
    terminal_env.runtime.env_type=remote_docker \
    terminal_env.runtime.scheduler_url=http://127.0.0.1:8000

Model: internal vs external

The model can be configured in two ways:

  • Internal (standalone eval): Set terminal_env.model in the YAML. TerminalEnvironment creates the model via ModelFactory from the config fields (platform, url, type).
  • External (AReaL training): Set terminal_env.model: null in the YAML. The AReaL workflow builds the model externally and passes the instance into GRPORollout at runtime.

You don't need to think about this for standalone eval — just fill in the model config. It only matters when integrating with a training framework like AReaL that manages its own inference engine.

What NOT to change (usually)

  • agent — prompt, tool list, iteration limits. These define the agent's behavior and should stay consistent across evaluations.
  • env — reward function and timeouts. Change only if you're adding a new reward function or debugging timeout issues.
  • terminal_env.model.model_platform — stays sglang unless you're using a different inference backend.

Config reference

terminal_env.model

FieldDescriptionExample
model_platformInference backendsglang
model_typeHuggingFace model pathQwen/Qwen3-8B
urlInference server URLhttp://localhost:30000/v1

terminal_env.runtime

FieldDescriptionDefault
env_typedocker or remote_dockerdocker
scheduler_urlSlot pool scheduler (remote_docker only)http://127.0.0.1:8000
node_api_keyNode manager API key (remote_docker only)harbor-node-dev-key

Eval loop

FieldDescriptionDefault
datasetDataset label or local pathseta-env-v2
n_trajsTrajectories per task (pass@k)8
workersMax concurrent tasks3
output_dirResults output directoryoutputs/eval