@evolvingmachines/evolve 0.0.65 → 0.0.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-DK2MGUPB.js → chunk-RFLMRPGK.js} +5 -5
- package/dist/cli/index.cjs +39 -39
- package/dist/cli/index.d.cts +3 -3
- package/dist/cli/index.d.ts +3 -3
- package/dist/cli/index.js +30 -30
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +1 -1
- package/dist/{types-B_qmzlMk.d.cts → types-84M4J_Vm.d.cts} +11 -44
- package/dist/{types-B_qmzlMk.d.ts → types-84M4J_Vm.d.ts} +11 -44
- package/package.json +4 -4
- package/skills/create-adapter/SKILL.md +71 -26
- package/skills/create-task/SKILL.md +124 -66
- package/skills/evolve/SKILL.md +37 -20
- package/skills/evolve-evals/SKILL.md +142 -69
- package/skills/evolve-evals/references/cli-reference/agent.md +76 -0
- package/skills/evolve-evals/references/cli-reference/analysis.md +78 -0
- package/skills/evolve-evals/references/cli-reference/analyze.md +95 -0
- package/skills/evolve-evals/references/cli-reference/auth.md +96 -0
- package/skills/evolve-evals/references/cli-reference/check.md +156 -0
- package/skills/evolve-evals/references/cli-reference/dataset.md +154 -0
- package/skills/evolve-evals/references/cli-reference/filesystem.md +168 -0
- package/skills/evolve-evals/references/cli-reference/index.md +149 -0
- package/skills/evolve-evals/references/cli-reference/job.md +198 -0
- package/skills/evolve-evals/references/cli-reference/run.md +187 -0
- package/skills/evolve-evals/references/cli-reference/secrets.md +77 -0
- package/skills/evolve-evals/references/cli-reference/session.md +56 -0
- package/skills/evolve-evals/references/cli-reference/skill.md +52 -0
- package/skills/evolve-evals/references/cli-reference/skills.md +85 -0
- package/skills/evolve-evals/references/cli-reference/trial.md +115 -0
- package/skills/evolve-evals/references/cli-reference/upload.md +72 -0
- package/skills/evolve-evals/references/core-concepts/agents.md +96 -0
- package/skills/evolve-evals/references/core-concepts/analyze.md +143 -0
- package/skills/evolve-evals/references/core-concepts/check.md +116 -0
- package/skills/evolve-evals/references/core-concepts/compatibility.md +39 -0
- package/skills/evolve-evals/references/core-concepts/compose.md +103 -0
- package/skills/evolve-evals/references/core-concepts/datasets.md +234 -0
- package/skills/evolve-evals/references/core-concepts/index.md +52 -0
- package/skills/evolve-evals/references/core-concepts/jobs.md +223 -0
- package/skills/evolve-evals/references/core-concepts/models.md +73 -0
- package/skills/evolve-evals/references/core-concepts/multi-step.md +93 -0
- package/skills/evolve-evals/references/core-concepts/rewardkit.md +341 -0
- package/skills/evolve-evals/references/core-concepts/sandboxes.md +73 -0
- package/skills/evolve-evals/references/core-concepts/secrets.md +86 -0
- package/skills/evolve-evals/references/core-concepts/sharing.md +81 -0
- package/skills/evolve-evals/references/core-concepts/skills.md +100 -0
- package/skills/evolve-evals/references/core-concepts/task-config.md +169 -0
- package/skills/evolve-evals/references/core-concepts/task-environment.md +127 -0
- package/skills/evolve-evals/references/core-concepts/task-reference.md +191 -0
- package/skills/evolve-evals/references/core-concepts/task-verifiers.md +209 -0
- package/skills/evolve-evals/references/core-concepts/tasks.md +90 -0
- package/skills/evolve-evals/references/core-concepts/teams.md +128 -0
- package/skills/evolve-evals/references/core-concepts/trial-outputs.md +225 -0
- package/skills/evolve-evals/references/core-concepts/trials.md +129 -0
- package/skills/evolve-evals/references/core-concepts/upload-sdk-session.md +240 -0
- package/skills/evolve-evals/references/core-concepts/upload.md +166 -0
- package/skills/evolve-evals/references/dashboard/checks.md +54 -0
- package/skills/evolve-evals/references/dashboard/datasets.md +65 -0
- package/skills/evolve-evals/references/dashboard/jobs.md +106 -0
- package/skills/evolve-evals/references/dashboard/traces.md +54 -0
- package/skills/evolve-evals/references/dashboard/trial-viewer.md +77 -0
- package/skills/evolve-evals/references/getting-started/first-task.md +228 -0
- package/skills/evolve-evals/references/getting-started/installation.md +79 -0
- package/skills/evolve-evals/references/getting-started/quick-start.md +100 -0
- package/skills/evolve-evals/references/index.md +58 -0
- package/skills/evolve-evals/references/sdk/http.md +110 -0
- package/skills/evolve-evals/references/sdk/python.md +108 -0
- package/skills/evolve-evals/references/sdk/typescript.md +104 -0
- package/skills/evolve-evals/references/sdk-reference/agents.md +75 -0
- package/skills/evolve-evals/references/sdk-reference/analyses.md +124 -0
- package/skills/evolve-evals/references/sdk-reference/auth.md +171 -0
- package/skills/evolve-evals/references/sdk-reference/checks.md +145 -0
- package/skills/evolve-evals/references/sdk-reference/datasets.md +170 -0
- package/skills/evolve-evals/references/sdk-reference/error-codes.md +231 -0
- package/skills/evolve-evals/references/sdk-reference/errors.md +98 -0
- package/skills/evolve-evals/references/sdk-reference/filesystem.md +166 -0
- package/skills/evolve-evals/references/sdk-reference/index.md +161 -0
- package/skills/evolve-evals/references/sdk-reference/jobs.md +250 -0
- package/skills/evolve-evals/references/sdk-reference/meta.md +54 -0
- package/skills/evolve-evals/references/sdk-reference/methods/agents.md +154 -0
- package/skills/evolve-evals/references/sdk-reference/methods/analyses.md +211 -0
- package/skills/evolve-evals/references/sdk-reference/methods/auth.md +257 -0
- package/skills/evolve-evals/references/sdk-reference/methods/checks.md +460 -0
- package/skills/evolve-evals/references/sdk-reference/methods/datasets.md +687 -0
- package/skills/evolve-evals/references/sdk-reference/methods/filesystem.md +527 -0
- package/skills/evolve-evals/references/sdk-reference/methods/jobs.md +1021 -0
- package/skills/evolve-evals/references/sdk-reference/methods/meta.md +209 -0
- package/skills/evolve-evals/references/sdk-reference/methods/secrets.md +157 -0
- package/skills/evolve-evals/references/sdk-reference/methods/skills.md +125 -0
- package/skills/evolve-evals/references/sdk-reference/methods/trials.md +371 -0
- package/skills/evolve-evals/references/sdk-reference/secrets.md +104 -0
- package/skills/evolve-evals/references/sdk-reference/skills.md +66 -0
- package/skills/evolve-evals/references/sdk-reference/trials.md +164 -0
- package/skills/evolve-evals/references/sdk-reference/types.md +1249 -0
- package/skills/publish/SKILL.md +103 -79
- package/skills/rewardkit/SKILL.md +78 -23
- package/spec/openapi.yaml +19 -74
- package/skills/evolve-evals/references/cli-reference/agent.mdx +0 -79
- package/skills/evolve-evals/references/cli-reference/analysis.mdx +0 -160
- package/skills/evolve-evals/references/cli-reference/analyze.mdx +0 -84
- package/skills/evolve-evals/references/cli-reference/auth.mdx +0 -133
- package/skills/evolve-evals/references/cli-reference/check.mdx +0 -263
- package/skills/evolve-evals/references/cli-reference/dataset.mdx +0 -151
- package/skills/evolve-evals/references/cli-reference/index.mdx +0 -108
- package/skills/evolve-evals/references/cli-reference/job.mdx +0 -278
- package/skills/evolve-evals/references/cli-reference/run.mdx +0 -204
- package/skills/evolve-evals/references/cli-reference/secrets.mdx +0 -95
- package/skills/evolve-evals/references/cli-reference/skill.mdx +0 -61
- package/skills/evolve-evals/references/cli-reference/skills.mdx +0 -81
- package/skills/evolve-evals/references/cli-reference/trial.mdx +0 -181
- package/skills/evolve-evals/references/cli-reference/upload.mdx +0 -36
- package/skills/evolve-evals/references/core-concepts/agents.mdx +0 -106
- package/skills/evolve-evals/references/core-concepts/analyze.mdx +0 -86
- package/skills/evolve-evals/references/core-concepts/check.mdx +0 -64
- package/skills/evolve-evals/references/core-concepts/datasets.mdx +0 -138
- package/skills/evolve-evals/references/core-concepts/index.mdx +0 -42
- package/skills/evolve-evals/references/core-concepts/jobs.mdx +0 -151
- package/skills/evolve-evals/references/core-concepts/models.mdx +0 -68
- package/skills/evolve-evals/references/core-concepts/sandboxes.mdx +0 -52
- package/skills/evolve-evals/references/core-concepts/secrets.mdx +0 -41
- package/skills/evolve-evals/references/core-concepts/sharing.mdx +0 -35
- package/skills/evolve-evals/references/core-concepts/skills.mdx +0 -42
- package/skills/evolve-evals/references/core-concepts/tasks.mdx +0 -216
- package/skills/evolve-evals/references/core-concepts/teams.mdx +0 -36
- package/skills/evolve-evals/references/core-concepts/trial-outputs.mdx +0 -117
- package/skills/evolve-evals/references/core-concepts/trials.mdx +0 -103
- package/skills/evolve-evals/references/core-concepts/upload.mdx +0 -93
- package/skills/evolve-evals/references/dashboard/checks.mdx +0 -21
- package/skills/evolve-evals/references/dashboard/datasets.mdx +0 -24
- package/skills/evolve-evals/references/dashboard/jobs.mdx +0 -65
- package/skills/evolve-evals/references/dashboard/traces.mdx +0 -17
- package/skills/evolve-evals/references/dashboard/trial-viewer.mdx +0 -30
- package/skills/evolve-evals/references/getting-started/installation.mdx +0 -56
- package/skills/evolve-evals/references/getting-started/quick-start.mdx +0 -94
- package/skills/evolve-evals/references/index.mdx +0 -48
- package/skills/evolve-evals/references/sdk/python.mdx +0 -161
- package/skills/evolve-evals/references/sdk/typescript.mdx +0 -163
- package/skills/evolve-evals/references/sdk-reference/agents.mdx +0 -108
- package/skills/evolve-evals/references/sdk-reference/analyses.mdx +0 -222
- package/skills/evolve-evals/references/sdk-reference/auth.mdx +0 -116
- package/skills/evolve-evals/references/sdk-reference/checks.mdx +0 -300
- package/skills/evolve-evals/references/sdk-reference/datasets.mdx +0 -346
- package/skills/evolve-evals/references/sdk-reference/errors.mdx +0 -210
- package/skills/evolve-evals/references/sdk-reference/index.mdx +0 -60
- package/skills/evolve-evals/references/sdk-reference/jobs.mdx +0 -822
- package/skills/evolve-evals/references/sdk-reference/meta.mdx +0 -52
- package/skills/evolve-evals/references/sdk-reference/skills.mdx +0 -69
- package/skills/evolve-evals/references/sdk-reference/trials.mdx +0 -302
- package/skills/evolve-evals/references/sdk-reference/types.mdx +0 -274
- package/skills/evolve-evals/references/snippets/global-options.mdx +0 -13
- package/skills/evolve-evals/references/snippets/list-flags.mdx +0 -23
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Datasets"
|
|
3
|
+
description: "Browse ready-to-run tasks or publish your own versioned collection."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
A dataset is a named collection of tasks. Use `name@version` for a specific version, or a bare name for the active version.
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
evolve dataset list
|
|
10
|
+
evolve dataset show harbor-examples@1.0
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
`show` lists tasks, timeouts, and provider compatibility. Use `--search <text>` with `list` to narrow the catalog.
|
|
14
|
+
|
|
15
|
+
## Publish your tasks
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
my-dataset/
|
|
19
|
+
├── hello-world/
|
|
20
|
+
│ ├── instruction.md
|
|
21
|
+
│ ├── task.toml
|
|
22
|
+
│ ├── environment/Dockerfile
|
|
23
|
+
│ └── tests/test.sh
|
|
24
|
+
└── another-task/
|
|
25
|
+
└── ...
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
You can publish a single task directory, a directory of tasks, or a directory containing `tasks/`.
|
|
29
|
+
|
|
30
|
+
### 1. Check the configuration
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
evolve dataset check ./my-dataset
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
This sends configuration files for validation. It does not upload the corpus or build images. Fix rejected declarations before publishing.
|
|
37
|
+
|
|
38
|
+
### 2. Publish a version
|
|
39
|
+
|
|
40
|
+
### Local directory
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
evolve dataset publish \
|
|
44
|
+
--dir ./my-dataset \
|
|
45
|
+
--name my-dataset --version 1.0 \
|
|
46
|
+
--watch
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Git repository
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
evolve dataset publish \
|
|
53
|
+
--git https://github.com/acme/my-dataset.git \
|
|
54
|
+
--ref v1.0.0 \
|
|
55
|
+
--name my-dataset --version 1.0 \
|
|
56
|
+
--watch
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Use a tag or full 40-character commit SHA. Branch names are rejected. `--path <folder>` selects a subdirectory.
|
|
60
|
+
|
|
61
|
+
### Harbor Hub
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
evolve dataset publish --from hub:cookbook/hello-world --watch
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Public Harbor Hub packages supply their own name and version. `--from` also accepts a public HTTPS tarball URL.
|
|
68
|
+
|
|
69
|
+
The dataset is private to your organization. Its owner can publish more versions under the same name.
|
|
70
|
+
|
|
71
|
+
### 3. Inspect the result
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
evolve dataset show my-dataset@1.0
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Check both ready and failed task counts. If you disconnect during publication, use `evolve dataset watch my-dataset` to resume watching.
|
|
78
|
+
|
|
79
|
+
## What publication does
|
|
80
|
+
|
|
81
|
+
```mermaid
|
|
82
|
+
%%{init: {"flowchart": {"nodeSpacing": 16, "rankSpacing": 20, "padding": 10}, "themeVariables": {"fontSize": "14px", "fontFamily": "Google Sans Flex, sans-serif"}}}%%
|
|
83
|
+
flowchart TB
|
|
84
|
+
A["1. Receive task package"] --> B["2. Validate and import tasks"]
|
|
85
|
+
B --> C["3. Prepare task images"]
|
|
86
|
+
C --> D{"Any tasks ready?"}
|
|
87
|
+
D -->|Yes| E["4. Version READY"]
|
|
88
|
+
D -->|No| F["4. Version FAILED"]
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Tasks build independently. A version can be `READY` while some tasks failed. Whole-dataset and glob selections run its ready tasks and report `build_exclusions`; explicitly selecting a failed task rejects the job.
|
|
92
|
+
|
|
93
|
+
A ready version becomes active on your dataset. Publishing a new version label leaves the previous active version in place if the new publication fails.
|
|
94
|
+
|
|
95
|
+
Use a new version label for changed tasks. Publishing an existing label re-imports it in place, so `name@version` selects a label rather than immutable content.
|
|
96
|
+
|
|
97
|
+
**Note:**
|
|
98
|
+
|
|
99
|
+
Configuration validation cannot prove that images build or tests are correct. Run [task checks](/core-concepts/check) to inspect task quality.
|
|
100
|
+
|
|
101
|
+
## Pin or switch versions
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# Run an exact version.
|
|
105
|
+
evolve run -d my-dataset@1.0 -a codex -m gpt-5.6-luna
|
|
106
|
+
|
|
107
|
+
# Change what the bare name resolves to.
|
|
108
|
+
evolve dataset activate my-dataset 1.0
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Only ready versions accept jobs. Jobs record the version they resolve when created.
|
|
112
|
+
|
|
113
|
+
## Download your source package
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
evolve dataset download my-dataset@1.0 -o ./corpora
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
The download includes the original corpus and its `solution/` files. It is owner-only; platform datasets are not downloadable through this command.
|
|
120
|
+
|
|
121
|
+
## dataset.toml manifest
|
|
122
|
+
|
|
123
|
+
An optional `dataset.toml` selects the tasks in a package and pins their content. Put it beside the task directories. If the package contains `tasks/`, a manifest in `tasks/dataset.toml` takes precedence over one at the package root.
|
|
124
|
+
|
|
125
|
+
```toml
|
|
126
|
+
schema_version = "1.0"
|
|
127
|
+
|
|
128
|
+
[dataset]
|
|
129
|
+
name = "acme/my-dataset"
|
|
130
|
+
version = "1.0"
|
|
131
|
+
description = "Our coding tasks"
|
|
132
|
+
authors = [{ name = "Acme", email = "evals@example.com" }]
|
|
133
|
+
keywords = ["coding"]
|
|
134
|
+
|
|
135
|
+
[[tasks]]
|
|
136
|
+
name = "acme/hello-world"
|
|
137
|
+
digest = "sha256:<task-content-hash>"
|
|
138
|
+
|
|
139
|
+
[[files]]
|
|
140
|
+
path = "README.md"
|
|
141
|
+
# Optional: digest = "sha256:<file-content-hash>"
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Replace the task digest placeholder with the helper's output below before publishing. A local package with a valid manifest can supply the publication name and version:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
evolve dataset publish --dir ./my-dataset --watch
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
The catalog name comes from the short part (`my-dataset`); the `acme/` prefix does not choose the owning Evolve team. Explicit `--name` and `--version` values win. Without a manifest version, pass `--version`. Git and HTTPS archive sources still require explicit publication name and version; public Harbor Hub packages supply defaults.
|
|
151
|
+
|
|
152
|
+
### Manifest fields and selection rules
|
|
153
|
+
|
|
154
|
+
| Field | Accepted value and behavior |
|
|
155
|
+
| --- | --- |
|
|
156
|
+
| `schema_version` | String, default `"1.0"`. |
|
|
157
|
+
| `dataset.name` | Required `org/name`. Each part starts with a letter or digit and contains only letters, digits, `.`, `_`, or `-`; `..` is forbidden. |
|
|
158
|
+
| `dataset.version` | Optional nonempty string. |
|
|
159
|
+
| `dataset.description` | String, default `""`. |
|
|
160
|
+
| `dataset.authors` | Array of tables with required nonempty `name` and optional string `email`; default `[]`. |
|
|
161
|
+
| `dataset.keywords` | Array of strings, default `[]`. |
|
|
162
|
+
| `tasks` | Required nonempty array. Each entry has `name` in the same `org/name` grammar and a required `digest`: `sha256:` followed by 64 lowercase hex characters. |
|
|
163
|
+
| `files` | Optional array. Each entry has a simple filename `path` (no directory separators) and optional `digest` in the same SHA-256 spelling. Empty or omitted digest skips hashing that file. |
|
|
164
|
+
|
|
165
|
+
Unknown root and `[dataset]` fields are rejected. Each listed dataset file must exist beside the manifest, even without a digest.
|
|
166
|
+
|
|
167
|
+
Task matching first uses an exact string match against `[task].name` in a local `task.toml`, then falls back to the reference's short name matching a task directory. Only listed tasks are imported. Every reference must resolve locally; missing tasks are not fetched from a registry.
|
|
168
|
+
|
|
169
|
+
Duplicate identical name/digest pairs are collapsed. An ambiguous declared task name, or references mapping the same directory to different digests, rejects the manifest. Missing tasks and any task/file digest mismatch fail publication.
|
|
170
|
+
|
|
171
|
+
### Compute a task content digest
|
|
172
|
+
|
|
173
|
+
Task digests use Harbor's content-hash algorithm, not the archive hash or a hash of `task.toml` alone. The helper below requires Python and `pathspec`:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
python3 -m pip install 'pathspec==1.0.3'
|
|
177
|
+
python3 - ./my-dataset/hello-world <<'PY'
|
|
178
|
+
import hashlib
|
|
179
|
+
import sys
|
|
180
|
+
from pathlib import Path
|
|
181
|
+
import pathspec
|
|
182
|
+
|
|
183
|
+
root = Path(sys.argv[1])
|
|
184
|
+
paths = [root / name for name in
|
|
185
|
+
("task.toml", "instruction.md", "README.md", "trajectory.json")
|
|
186
|
+
if (root / name).is_file()]
|
|
187
|
+
for name in ("environment", "tests", "solution", "steps"):
|
|
188
|
+
paths.extend(path for path in (root / name).rglob("*") if path.is_file())
|
|
189
|
+
ignore_file = root / ".gitignore"
|
|
190
|
+
patterns = (ignore_file.read_text().splitlines() if ignore_file.is_file() else
|
|
191
|
+
["__pycache__/", "*.pyc", ".DS_Store", "*.swp", "*.swo", "*~"])
|
|
192
|
+
ignored = pathspec.PathSpec.from_lines("gitignore", patterns)
|
|
193
|
+
digest = hashlib.sha256()
|
|
194
|
+
for path in sorted(paths, key=lambda path: path.relative_to(root).as_posix()):
|
|
195
|
+
relative = path.relative_to(root).as_posix()
|
|
196
|
+
if any(part.startswith("._") and part != "._" for part in path.relative_to(root).parts):
|
|
197
|
+
continue
|
|
198
|
+
if ignored.match_file(relative):
|
|
199
|
+
continue
|
|
200
|
+
file_hash = hashlib.sha256(path.read_bytes()).hexdigest()
|
|
201
|
+
digest.update(f"{relative}\0{file_hash}\n".encode())
|
|
202
|
+
print("sha256:" + digest.hexdigest())
|
|
203
|
+
PY
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
The hash covers the four listed root files when present and regular files recursively under `environment/`, `tests/`, `solution/`, and `steps/`. Other root files are outside this digest. Paths are relative, use `/`, and sort lexicographically. For each file, the outer SHA-256 receives its path, a NUL byte, the lowercase SHA-256 of its bytes, and a newline.
|
|
207
|
+
|
|
208
|
+
A task's `.gitignore` supplies the filters when present; otherwise the default patterns shown above apply. This uses PathSpec's `gitignore` pattern semantics, which differ from Git's directory re-inclusion behavior. macOS `._` sidecars are skipped. Use regular files: publication does not support task symlinks.
|
|
209
|
+
|
|
210
|
+
Dataset-level `[[files]]` digests are simpler: prefix the SHA-256 of that file's bytes with `sha256:`. Recompute affected digests whenever you edit content.
|
|
211
|
+
|
|
212
|
+
### Package details
|
|
213
|
+
|
|
214
|
+
Local publication preserves executable permissions and dotfiles. It excludes `.git`, `.DS_Store`, `.venv`, and symlinks.
|
|
215
|
+
|
|
216
|
+
Custom `metric.py` dataset metrics are not supported. A script beside the manifest or listed in `files` rejects publication; use the platform's metrics.
|
|
217
|
+
|
|
218
|
+
Large local uploads are resumable. During receipt, the import can be `QUEUED` with `receiving: true`; it starts building after the corpus arrives.
|
|
219
|
+
|
|
220
|
+
### Ownership and updates
|
|
221
|
+
|
|
222
|
+
A dataset name belongs to its first publisher. Another owner cannot publish under that name.
|
|
223
|
+
|
|
224
|
+
The SDK supports deleting an owned dataset, but deletion is rejected once a job references it. The CLI has no dataset delete command.
|
|
225
|
+
|
|
226
|
+
Git-backed datasets can report when their source tag moves. Automatic upstream import is opt-in through the SDK's `datasets().update()`; a normal publication does not enable it.
|
|
227
|
+
|
|
228
|
+
**[Dataset commands](/cli-reference/dataset)**
|
|
229
|
+
|
|
230
|
+
Sources, validation, publication, and downloads.
|
|
231
|
+
|
|
232
|
+
**[Dataset SDK](/sdk-reference/datasets)**
|
|
233
|
+
|
|
234
|
+
The Python and TypeScript clients.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "How evaluations fit together"
|
|
3
|
+
description: "The few concepts you need to read a job and understand its results."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
A dataset supplies the tasks. An agent and model attempt them. A verifier scores the work.
|
|
7
|
+
|
|
8
|
+
```mermaid
|
|
9
|
+
%%{init: {"flowchart": {"nodeSpacing": 16, "rankSpacing": 20, "padding": 10}, "themeVariables": {"fontSize": "14px", "fontFamily": "Google Sans Flex, sans-serif"}}}%%
|
|
10
|
+
flowchart TD
|
|
11
|
+
D["Dataset version"] --> T["Tasks"]
|
|
12
|
+
A["Agent configurations<br/>Harness + model + settings"] --> J["Job"]
|
|
13
|
+
T --> J
|
|
14
|
+
J --> R["Trials<br/>Task × configuration × attempt"]
|
|
15
|
+
R --> V["Verifier → reward"]
|
|
16
|
+
R --> F["Trace + logs + files"]
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
| Concept | What it means | Example |
|
|
20
|
+
| --- | --- | --- |
|
|
21
|
+
| [Task](/core-concepts/tasks) | An instruction, environment, and grading logic. | Fix a bug and pass the tests. |
|
|
22
|
+
| [Dataset](/core-concepts/datasets) | A named, versioned collection of tasks. | `harbor-examples@1.0`. |
|
|
23
|
+
| [Agent](/core-concepts/agents) | A harness running a selected model. | Codex with `gpt-5.6-luna`. |
|
|
24
|
+
| [Sandbox](/core-concepts/sandboxes) | The isolated environment where a trial runs. | A task image on Daytona, E2B, or Modal. |
|
|
25
|
+
| [Job](/core-concepts/jobs) | A group of trials with shared run settings. | 10 tasks × 2 configurations × 3 attempts = 60 trials. |
|
|
26
|
+
| [Trial](/core-concepts/trials) | One attempt at one task. | One score and its supporting evidence. |
|
|
27
|
+
| [Verifier](/core-concepts/task-verifiers) | The task's code that evaluates the output. | A script writing a reward of `0` or `1`. |
|
|
28
|
+
| [Trace](/core-concepts/trial-outputs) | The recorded agent conversation and actions. | Messages, tool calls, and results. |
|
|
29
|
+
|
|
30
|
+
## Two ways to examine quality
|
|
31
|
+
|
|
32
|
+
**[Check the task](/core-concepts/check)**
|
|
33
|
+
|
|
34
|
+
Review the instruction, environment, solution, and verifier before scaling the evaluation.
|
|
35
|
+
|
|
36
|
+
**[Analyze the attempt](/core-concepts/analyze)**
|
|
37
|
+
|
|
38
|
+
Review a recorded trial against a rubric to understand the agent's behavior.
|
|
39
|
+
|
|
40
|
+
Checks and analyses are optional model-powered operations with their own results and costs. The task's verifier produces the evaluation reward.
|
|
41
|
+
|
|
42
|
+
## Read the result at the right level
|
|
43
|
+
|
|
44
|
+
| Level | What to read |
|
|
45
|
+
| --- | --- |
|
|
46
|
+
| **Job configuration** | What was selected and resolved |
|
|
47
|
+
| **Job summary** | Counts, scores, and costs |
|
|
48
|
+
| **Each trial: status** | Whether execution and grading completed |
|
|
49
|
+
| **Each trial: reward** | How the verifier scored the work |
|
|
50
|
+
| **Each trial: evidence** | Trace, logs, and recorded files |
|
|
51
|
+
|
|
52
|
+
Start with the [quick start](/getting-started/quick-start), then learn how to [configure a job](/core-concepts/jobs).
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Jobs"
|
|
3
|
+
description: "Run a task set across agents and models. Follow each attempt to its result."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
A job runs selected tasks against one or more **agent arms**. An arm is an agent, model, and configuration you want to evaluate.
|
|
7
|
+
|
|
8
|
+
```text
|
|
9
|
+
3 selected tasks
|
|
10
|
+
× 2 agent arms
|
|
11
|
+
× 2 attempts
|
|
12
|
+
= 12 trials
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Each of the three tasks runs twice in Arm A and twice in Arm B.
|
|
16
|
+
|
|
17
|
+
## Start a job
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
evolve run \
|
|
21
|
+
-d harbor-examples@1.0 -i hello-world \
|
|
22
|
+
-a codex -m gpt-5.6-luna \
|
|
23
|
+
--max-trial-spend 1 -r 0 \
|
|
24
|
+
--watch
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
| Choose | Flag | Meaning |
|
|
28
|
+
| --- | --- | --- |
|
|
29
|
+
| Task set | `-d name@version` | Repeat for several datasets. |
|
|
30
|
+
| Agent | `-a codex` | The harness that runs the model. |
|
|
31
|
+
| Model | `-m model` | Repeat to compare models with the same harness. |
|
|
32
|
+
| Attempts | `-k 2` | Attempts per task and arm. Default: 1. |
|
|
33
|
+
| Parallel trials | `-n 4` | Job concurrency. Default: 4; maximum: 150. |
|
|
34
|
+
| Label | `--job-name nightly` | A readable name. The job ID remains its identity. |
|
|
35
|
+
|
|
36
|
+
Use a [config file](#config-files) to compare different harnesses in one job.
|
|
37
|
+
|
|
38
|
+
## Narrow the task set
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
1. Select dataset version
|
|
42
|
+
↓
|
|
43
|
+
2. Include names matching -i
|
|
44
|
+
↓
|
|
45
|
+
3. Remove names matching -x
|
|
46
|
+
↓
|
|
47
|
+
4. Keep up to -l tasks per dataset
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
`-i` and `-x` accept task-name globs. Quote them so your shell does not expand them.
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
evolve run -d my-dataset@1.0 -a codex -m gpt-5.6-luna \
|
|
54
|
+
-i 'auth-*' -x 'auth-legacy' -l 20 \
|
|
55
|
+
--max-trial-spend 2 -r 0 --watch
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Watch it
|
|
59
|
+
|
|
60
|
+
With `--watch`, the CLI follows events until the job finishes. Without it, the CLI returns the accepted job immediately.
|
|
61
|
+
|
|
62
|
+
Use the returned ID as `$JOB_ID`:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
evolve job show "$JOB_ID"
|
|
66
|
+
evolve job trials "$JOB_ID"
|
|
67
|
+
evolve job tasks "$JOB_ID"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Note:**
|
|
71
|
+
|
|
72
|
+
**Accepted** means the job was created. **Completed** means every trial settled. Neither means every trial succeeded.
|
|
73
|
+
|
|
74
|
+
## Spend and retries
|
|
75
|
+
|
|
76
|
+
Set `--max-trial-spend` to cap each trial attempt’s **agent** model spend. The response records the resolved cap and its model-spend estimate for the full job:
|
|
77
|
+
|
|
78
|
+
```text
|
|
79
|
+
worst_case_spend_usd
|
|
80
|
+
= per-trial cap
|
|
81
|
+
× trial count
|
|
82
|
+
× (1 + max_retries)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
| Cost | Where to read it |
|
|
86
|
+
| --- | --- |
|
|
87
|
+
| Job model spend, including retired retry attempts | `stats.cost_usd` |
|
|
88
|
+
| Verifier judge spend, included in that total | `stats.judge_cost_usd` |
|
|
89
|
+
| Trace analysis spend, separate from trial spend | `stats.analysis.cost_usd` |
|
|
90
|
+
| GPU compute estimate, separate from model spend | `stats.gpu_cost_usd` |
|
|
91
|
+
|
|
92
|
+
An LLM verifier judge has its own cap: the smaller of the agent cap and $5. Its spend is additional to the estimate above. Analysis also has a separate budget.
|
|
93
|
+
|
|
94
|
+
The fleet defaults are $200 per trial and 2 infrastructure retries; deployment settings can change them. The job response records the values used. There is no job-wide spend-cap setting.
|
|
95
|
+
|
|
96
|
+
A trial that reaches its own cap proceeds to verification. An account, team, or platform budget refusal is a separate `BUDGET` outcome.
|
|
97
|
+
|
|
98
|
+
### Automatic retries and capacity waits
|
|
99
|
+
|
|
100
|
+
`-r 0` disables configured infrastructure retries. With retries enabled, only eligible `INFRASTRUCTURE_ERROR` trials rerun automatically. Each retry receives a fresh per-trial cap; previous spend remains in the job total.
|
|
101
|
+
|
|
102
|
+
`--retry-include` and `--retry-exclude` filter exception types. Exclusions win. The same infrastructure failure twice in a row can stop retries early.
|
|
103
|
+
|
|
104
|
+
A provider that cannot allocate a sandbox can cause a **capacity wait**, even with `-r 0`. Capacity waits use a separate bounded wait budget and do not consume configured retries.
|
|
105
|
+
|
|
106
|
+
## Read the results
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
evolve job trials "$JOB_ID" --status INFRASTRUCTURE_ERROR,SCORING_ERROR
|
|
110
|
+
evolve job compare "$JOB_ID" "$OTHER_JOB_ID"
|
|
111
|
+
evolve job list --search nightly
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Results are grouped by agent arm and dataset. Compare 2–10 jobs at once.
|
|
115
|
+
|
|
116
|
+
### How to read pass@k
|
|
117
|
+
|
|
118
|
+
pass@k estimates the chance of at least one successful attempt among `k` attempts, averaged across tasks.
|
|
119
|
+
|
|
120
|
+
It appears for settled groups with one binary reward per trial. Missing rewards count as failures for this statistic; the trial's own reward remains absent. Non-binary or multi-key rewards do not produce pass@k.
|
|
121
|
+
|
|
122
|
+
Available `k` values are powers of two and multiples of five up to the smallest per-task attempt count. A single-attempt group has no pass@k.
|
|
123
|
+
|
|
124
|
+
## Statuses
|
|
125
|
+
|
|
126
|
+
| Status | Meaning |
|
|
127
|
+
| --- | --- |
|
|
128
|
+
| `QUEUED` | Accepted; waiting for dispatch. |
|
|
129
|
+
| `RUNNING` | Trials are being processed. |
|
|
130
|
+
| `CANCELLING` | Cancellation requested; active trials are stopping. |
|
|
131
|
+
| `COMPLETED` | All trials settled. Some may have errors. |
|
|
132
|
+
| `CANCELLED` | The job was cancelled. |
|
|
133
|
+
| `FAILED` | Reserved in the API; the current worker does not assign it. |
|
|
134
|
+
|
|
135
|
+
Read [trial statuses](/core-concepts/trials#statuses) to understand individual outcomes.
|
|
136
|
+
|
|
137
|
+
## Derive a new job
|
|
138
|
+
|
|
139
|
+
Each command below creates a new job linked through `source_jobs`. The original result stays intact.
|
|
140
|
+
|
|
141
|
+
| Action | Runs again | Selects |
|
|
142
|
+
| --- | --- | --- |
|
|
143
|
+
| **Resume** | Agent and verifier | Failed or stopped trials from a finished job. |
|
|
144
|
+
| **Retry** | Agent and verifier | All, failed, or explicitly selected settled trials. Scored trials are allowed. |
|
|
145
|
+
| **Regrade** | Verifier only | Eligible trials with recorded verifier inputs. |
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
evolve job resume "$JOB_ID"
|
|
149
|
+
evolve job retry "$JOB_ID" --failed-only
|
|
150
|
+
evolve job retry "$JOB_ID" -t "$TRIAL_ID"
|
|
151
|
+
evolve job regrade "$JOB_ID" --task hello-world
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Use full trial IDs with `-t`. Named settled trials can be retried while other trials in the source job are running. Whole-job retry and resume require a finished source.
|
|
155
|
+
|
|
156
|
+
### Regrade eligibility
|
|
157
|
+
|
|
158
|
+
Regrade re-runs the recorded verifier snapshot on retained inputs. It does not accept a replacement verifier or pick up edits to the task's tests.
|
|
159
|
+
|
|
160
|
+
Regrade needs recorded inputs from a separate verifier environment. Shared-verifier, multi-step, and LLM-judge tasks are not supported for regrade.
|
|
161
|
+
|
|
162
|
+
A whole-job regrade skips ineligible trials and refuses if none remain. A single-trial regrade reports the reason it is ineligible. Uploaded jobs cannot be resumed, retried, or regraded.
|
|
163
|
+
|
|
164
|
+
## Stop, cancel, delete
|
|
165
|
+
|
|
166
|
+
| Command | Effect |
|
|
167
|
+
| --- | --- |
|
|
168
|
+
| `evolve job cancel "$JOB_ID"` | Stop the whole job. |
|
|
169
|
+
| `evolve job stop "$JOB_ID" --dataset my-dataset` | Stop trials from one dataset. Other trials continue. |
|
|
170
|
+
| `evolve job delete "$JOB_ID" --yes` | Permanently remove the finished job and its stored results. |
|
|
171
|
+
|
|
172
|
+
Deletion is restricted to the creator. Active analyses or derived regrades can prevent deletion until they finish.
|
|
173
|
+
|
|
174
|
+
## Share
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
evolve job share "$JOB_ID" --link
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Share by link or email. Recipients get read access; see [Sharing](/core-concepts/sharing).
|
|
181
|
+
|
|
182
|
+
## Download
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
evolve job download "$JOB_ID" -o results/
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
This unpacks a Harbor-format job directory under `results/job-<id>/`, with job records and one folder per trial. See [Trial outputs](/core-concepts/trial-outputs).
|
|
189
|
+
|
|
190
|
+
## Config files
|
|
191
|
+
|
|
192
|
+
Use YAML or JSON for a repeatable comparison:
|
|
193
|
+
|
|
194
|
+
```yaml comparison.yaml
|
|
195
|
+
datasets:
|
|
196
|
+
- name: harbor-examples
|
|
197
|
+
version: "1.0"
|
|
198
|
+
task_names: [hello-world]
|
|
199
|
+
agents:
|
|
200
|
+
- name: codex
|
|
201
|
+
model_name: gpt-5.6-luna
|
|
202
|
+
- name: claude
|
|
203
|
+
model_name: fable
|
|
204
|
+
n_attempts: 2
|
|
205
|
+
max_trial_spend_usd: 1
|
|
206
|
+
retry:
|
|
207
|
+
max_retries: 0
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
evolve run -c comparison.yaml --print-config
|
|
212
|
+
evolve run -c comparison.yaml --watch
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
`--print-config` shows the request without submitting it. It does not resolve every server default or validate server acceptance. Use `--org` for team ownership.
|
|
216
|
+
|
|
217
|
+
**[Run reference](/cli-reference/run)**
|
|
218
|
+
|
|
219
|
+
Flags, configuration overrides, and output modes.
|
|
220
|
+
|
|
221
|
+
**[Inspect a trial](/core-concepts/trials)**
|
|
222
|
+
|
|
223
|
+
Read the score, failure, and trace.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Models"
|
|
3
|
+
description: "Select models, compare them, and control metered spend."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
`-m` selects the model for an evaluation arm. Every arm must name a model; there is no default.
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
evolve run -d harbor-examples@1.0 -i hello-world \
|
|
10
|
+
-a codex \
|
|
11
|
+
-m gpt-5.6-luna -m gpt-5.6-terra \
|
|
12
|
+
--max-trial-spend 1 --max-retries 0 --watch
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Repeating `-m` creates one arm per model. This command runs the selected task once with each model.
|
|
16
|
+
|
|
17
|
+
## Find a supported model
|
|
18
|
+
|
|
19
|
+
Each harness has its own model names. Read the live roster instead of assuming a name works with every harness:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
curl -sS https://dashboard.evolvingmachines.ai/api/meta
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The `agents` list includes each harness's models, effort support, and configuration capabilities. The same document is available through [`meta()` in both SDKs](/sdk-reference/meta), without authentication.
|
|
26
|
+
|
|
27
|
+
## Model access and spend
|
|
28
|
+
|
|
29
|
+
```text
|
|
30
|
+
1. Agent harness
|
|
31
|
+
↓
|
|
32
|
+
2. Evolve gateway
|
|
33
|
+
Meter usage against the cap
|
|
34
|
+
↓
|
|
35
|
+
3. Model provider
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
An `EVOLVE_API_KEY` supplies platform model access. `--max-trial-spend` limits the agent’s metered spend per trial attempt. Verifier judges and trace analysis have separate budgets. See [job costs](/core-concepts/jobs#spend-and-retries).
|
|
39
|
+
|
|
40
|
+
Requests that bypass the gateway with separately supplied credentials are not metered by Evolve. A task's `no-network` agent policy restricts model access to the platform gateway.
|
|
41
|
+
|
|
42
|
+
If you enable your own provider key, supported model requests bill that provider account. Gateway metering and the cap still apply. Job creation still rejects accounts with an exhausted platform credit balance.
|
|
43
|
+
|
|
44
|
+
## Reasoning effort
|
|
45
|
+
|
|
46
|
+
`--effort` applies to every arm in the CLI run. Accepted values depend on the harness:
|
|
47
|
+
|
|
48
|
+
| Harness behavior | How to configure it |
|
|
49
|
+
| --- | --- |
|
|
50
|
+
| Supports effort levels | Use a value from `limits.job.reasoning_efforts` |
|
|
51
|
+
| Qwen thinking mode | Use `off` or `minimal` to disable thinking; `medium` or `thinking` to enable it |
|
|
52
|
+
| Gemini | Do not pass effort; it is unsupported |
|
|
53
|
+
| Custom agent | Configure reasoning in its run command |
|
|
54
|
+
|
|
55
|
+
When omitted, Evolve resolves the harness's default and records it in `agent_info.reasoning_effort`. The same harness and model at different efforts are distinct arms.
|
|
56
|
+
|
|
57
|
+
In `/api/meta`, `agents[].effort_support` identifies the mode: `level`, `binary`, or `none`. Qwen's accepted values are listed in `limits.job.binary_effort_values`.
|
|
58
|
+
|
|
59
|
+
## Analysis and check models
|
|
60
|
+
|
|
61
|
+
Trace analysis and task checks use the Claude Code harness. Select their model separately:
|
|
62
|
+
|
|
63
|
+
| Operation | Model option |
|
|
64
|
+
| --- | --- |
|
|
65
|
+
| `evolve analyze` | `-m` |
|
|
66
|
+
| `evolve check` | `-m` |
|
|
67
|
+
| Analysis attached to `evolve run` | `--analyze-model` |
|
|
68
|
+
|
|
69
|
+
Their default is `openrouter/deepseek/deepseek-v4.1-flash`. Choose from the supported Claude Code roster.
|
|
70
|
+
|
|
71
|
+
**[Configure a run](/cli-reference/run)**
|
|
72
|
+
|
|
73
|
+
All model, effort, concurrency, and budget options.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Multi-step tasks"
|
|
3
|
+
description: "Give the agent a sequence of instructions while preserving its files."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
A multi-step task runs ordered instructions in one shared environment. Files persist between steps; each step starts a fresh agent conversation and receives its own verification result.
|
|
7
|
+
|
|
8
|
+
```mermaid
|
|
9
|
+
%%{init: {"flowchart": {"nodeSpacing": 16, "rankSpacing": 20, "padding": 10, "subGraphTitleMargin": {"top": 8, "bottom": 24}}, "themeVariables": {"fontSize": "14px", "fontFamily": "Google Sans Flex, sans-serif"}}}%%
|
|
10
|
+
flowchart TB
|
|
11
|
+
subgraph shared["One shared environment"]
|
|
12
|
+
A["1. Start environment"] --> B["2. Step 1<br/>New conversation"]
|
|
13
|
+
B --> C["3. Verify step 1"]
|
|
14
|
+
C -->|"Threshold met"| D["4. Step 2<br/>New conversation · same files"]
|
|
15
|
+
D --> E["5. Verify step 2"]
|
|
16
|
+
end
|
|
17
|
+
E --> F["6. Select trial reward<br/>mean or final"]
|
|
18
|
+
C -->|"Threshold missed<br/>Skip step 2"| F
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
This two-step example uses the same environment for both agent steps and their verifiers. Reward thresholds and failure rules decide whether later steps run.
|
|
22
|
+
|
|
23
|
+
## Directory layout
|
|
24
|
+
|
|
25
|
+
- migrate-then-test/
|
|
26
|
+
- task.toml
|
|
27
|
+
- environment/
|
|
28
|
+
- Dockerfile
|
|
29
|
+
- tests/
|
|
30
|
+
- test.sh
|
|
31
|
+
- steps/
|
|
32
|
+
- 01-migrate/
|
|
33
|
+
- instruction.md
|
|
34
|
+
- tests/
|
|
35
|
+
- test.sh
|
|
36
|
+
- workdir/
|
|
37
|
+
- setup.sh
|
|
38
|
+
- 02-test/
|
|
39
|
+
- instruction.md
|
|
40
|
+
- tests/
|
|
41
|
+
- test.sh
|
|
42
|
+
|
|
43
|
+
The root `tests/` folder can hold shared verifier files. Each step can include optional `workdir/` files and a `setup.sh` inside that folder.
|
|
44
|
+
|
|
45
|
+
Each step needs an instruction and a test script, either its own or the shared root `tests/test.sh`. Step test files override shared files with the same path.
|
|
46
|
+
|
|
47
|
+
## Declare the order
|
|
48
|
+
|
|
49
|
+
```toml task.toml
|
|
50
|
+
multi_step_reward_strategy = "mean"
|
|
51
|
+
|
|
52
|
+
[[steps]]
|
|
53
|
+
name = "01-migrate"
|
|
54
|
+
min_reward = 0.5
|
|
55
|
+
|
|
56
|
+
[[steps]]
|
|
57
|
+
name = "02-test"
|
|
58
|
+
|
|
59
|
+
[steps.agent]
|
|
60
|
+
timeout_sec = 600
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Every declared step must have a matching directory, and every step directory must be declared. There is no root instruction for this layout.
|
|
64
|
+
|
|
65
|
+
Before a step starts, its optional `workdir/` files are copied into the working directory and `setup.sh` runs if present.
|
|
66
|
+
|
|
67
|
+
## Rewards and stopping
|
|
68
|
+
|
|
69
|
+
| Setting | Meaning |
|
|
70
|
+
| --- | --- |
|
|
71
|
+
| `mean` | Average each metric across steps with a verifier result; a missing metric counts as `0`. This is the default |
|
|
72
|
+
| `final` | Use the last executed step's result, including a step that stopped the trial early |
|
|
73
|
+
| `min_reward = 0.5` | Require the `reward` key to be at least `0.5`; a missing key also stops the trial |
|
|
74
|
+
| `min_reward = { accuracy = 0.8 }` | Require each named metric to meet its threshold; a missing metric also stops the trial |
|
|
75
|
+
|
|
76
|
+
A setup or healthcheck failure stops the remaining steps. A step error with no verifier result also stops the trial. An agent error alone can still continue when verification returns a result and the reward thresholds pass. Infrastructure failures stop the trial.
|
|
77
|
+
|
|
78
|
+
The trial exposes individual outcomes in `step_results`. A retry starts again at step 1.
|
|
79
|
+
|
|
80
|
+
## Current limits
|
|
81
|
+
|
|
82
|
+
| Supported per step | Set once for the whole task |
|
|
83
|
+
| --- | --- |
|
|
84
|
+
| Instruction and tests | Environment image and agent user |
|
|
85
|
+
| Agent and verifier timeouts | Network policies |
|
|
86
|
+
| Verifier environment variables | Shared verifier mode |
|
|
87
|
+
| Healthcheck | Sandbox provider |
|
|
88
|
+
|
|
89
|
+
Multi-step tasks require shared verification. Compose, separate verification, per-step agent users, per-step network policies, per-step verifier environments, and per-step collection hooks are rejected. Verifiers run as root. These trials cannot be regraded.
|
|
90
|
+
|
|
91
|
+
`steps.artifacts` does not create a separate snapshot after each step. Save intermediate outputs under distinct paths when you need to inspect them later.
|
|
92
|
+
|
|
93
|
+
To seed the first conversation on Claude Code or Codex, put an ATIF `trajectory.json` inside the first step’s directory, beside its `instruction.md`. A root trajectory or a trajectory in a later step is rejected. Later steps start fresh conversations.
|