@zenera/cli 1.1.24 → 1.1.25
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/README.md +53 -0
- package/dist/ask.js +28 -5
- package/dist/banner.js +2 -2
- package/dist/batch.d.ts +6 -0
- package/dist/batch.js +76 -1
- package/dist/catalog.d.ts +11 -1
- package/dist/catalog.js +80 -7
- package/dist/commands/inspect.d.ts +47 -1
- package/dist/commands/inspect.js +167 -18
- package/dist/commands/memory.js +128 -29
- package/dist/commands/meta.js +311 -21
- package/dist/commands/models.js +96 -12
- package/dist/commands/open.js +4 -4
- package/dist/commands/run.js +38 -4
- package/dist/commands/sandbox.js +76 -14
- package/dist/engine.d.ts +5 -0
- package/dist/engine.js +1 -0
- package/dist/eventlog.d.ts +59 -0
- package/dist/eventlog.js +146 -0
- package/dist/liveness.d.ts +7 -0
- package/dist/liveness.js +15 -1
- package/dist/meta/editor.d.ts +9 -0
- package/dist/meta/editor.js +60 -0
- package/dist/meta/finetune/children.d.ts +8 -0
- package/dist/meta/finetune/children.js +76 -0
- package/dist/meta/finetune/command.d.ts +30 -0
- package/dist/meta/finetune/command.js +338 -0
- package/dist/meta/finetune/dataset/anchors.d.ts +41 -0
- package/dist/meta/finetune/dataset/anchors.js +239 -0
- package/dist/meta/finetune/dataset/changes.d.ts +36 -0
- package/dist/meta/finetune/dataset/changes.js +319 -0
- package/dist/meta/finetune/dataset/command.d.ts +17 -0
- package/dist/meta/finetune/dataset/command.js +1011 -0
- package/dist/meta/finetune/dataset/drift.d.ts +33 -0
- package/dist/meta/finetune/dataset/drift.js +71 -0
- package/dist/meta/finetune/dataset/export.d.ts +26 -0
- package/dist/meta/finetune/dataset/export.js +51 -0
- package/dist/meta/finetune/dataset/index.d.ts +2 -0
- package/dist/meta/finetune/dataset/index.js +2 -0
- package/dist/meta/finetune/dataset/sample.d.ts +50 -0
- package/dist/meta/finetune/dataset/sample.js +197 -0
- package/dist/meta/finetune/dataset/schema.d.ts +33 -0
- package/dist/meta/finetune/dataset/schema.js +216 -0
- package/dist/meta/finetune/dataset/store.d.ts +35 -0
- package/dist/meta/finetune/dataset/store.js +177 -0
- package/dist/meta/finetune/dataset/types.d.ts +125 -0
- package/dist/meta/finetune/dataset/types.js +39 -0
- package/dist/meta/finetune/failure.d.ts +15 -0
- package/dist/meta/finetune/failure.js +26 -0
- package/dist/meta/finetune/feedback.d.ts +45 -0
- package/dist/meta/finetune/feedback.js +85 -0
- package/dist/meta/finetune/improvements.d.ts +51 -0
- package/dist/meta/finetune/improvements.js +244 -0
- package/dist/meta/finetune/index.d.ts +2 -0
- package/dist/meta/finetune/index.js +2 -0
- package/dist/meta/finetune/journal.d.ts +35 -0
- package/dist/meta/finetune/journal.js +135 -0
- package/dist/meta/finetune/live.d.ts +74 -0
- package/dist/meta/finetune/live.js +226 -0
- package/dist/meta/finetune/loop.d.ts +3 -0
- package/dist/meta/finetune/loop.js +114 -0
- package/dist/meta/finetune/memories.d.ts +47 -0
- package/dist/meta/finetune/memories.js +154 -0
- package/dist/meta/finetune/report.d.ts +33 -0
- package/dist/meta/finetune/report.js +1284 -0
- package/dist/meta/finetune/retry.d.ts +24 -0
- package/dist/meta/finetune/retry.js +96 -0
- package/dist/meta/finetune/sampler.d.ts +18 -0
- package/dist/meta/finetune/sampler.js +41 -0
- package/dist/meta/finetune/system.d.ts +27 -0
- package/dist/meta/finetune/system.js +132 -0
- package/dist/meta/finetune/train.d.ts +39 -0
- package/dist/meta/finetune/train.js +391 -0
- package/dist/meta/finetune/tui.d.ts +16 -0
- package/dist/meta/finetune/tui.js +291 -0
- package/dist/meta/finetune/tuning.d.ts +167 -0
- package/dist/meta/finetune/tuning.js +289 -0
- package/dist/meta/finetune/usage.d.ts +62 -0
- package/dist/meta/finetune/usage.js +225 -0
- package/dist/meta/host.d.ts +14 -0
- package/dist/meta/host.js +20 -0
- package/dist/meta/index.d.ts +11 -0
- package/dist/meta/index.js +11 -0
- package/dist/meta/launch.d.ts +81 -0
- package/dist/meta/launch.js +286 -0
- package/dist/meta/model.d.ts +44 -0
- package/dist/meta/model.js +119 -0
- package/dist/meta/prompts.d.ts +18 -0
- package/dist/meta/prompts.js +61 -0
- package/dist/meta/relay.d.ts +20 -0
- package/dist/meta/relay.js +123 -0
- package/dist/meta/tokens.d.ts +52 -0
- package/dist/meta/tokens.js +226 -0
- package/dist/meta/window.d.ts +61 -0
- package/dist/meta/window.js +198 -0
- package/dist/meta/wire.d.ts +42 -0
- package/dist/meta/wire.js +129 -0
- package/dist/modelref.d.ts +16 -0
- package/dist/modelref.js +41 -0
- package/dist/narrate.js +5 -2
- package/dist/podman.d.ts +26 -0
- package/dist/podman.js +83 -3
- package/dist/projects.d.ts +0 -5
- package/dist/projects.js +2 -15
- package/dist/sandbox.d.ts +2 -0
- package/dist/sandbox.js +10 -3
- package/dist/scaffold.d.ts +15 -6
- package/dist/scaffold.js +5 -60
- package/dist/session.js +4 -29
- package/dist/term.d.ts +2 -0
- package/dist/term.js +11 -2
- package/dist/trace.js +53 -2
- package/dist/tui/models.d.ts +33 -0
- package/dist/tui/models.js +389 -0
- package/dist/tui/wrap.d.ts +5 -0
- package/dist/tui/wrap.js +12 -0
- package/dist/usage.d.ts +78 -0
- package/dist/usage.js +51 -0
- package/package.json +3 -2
- package/templates/editor/.github/copilot-instructions.md +31 -102
- package/templates/editor/.github/prompts/analyze.prompt.md +31 -0
- package/templates/editor/.github/prompts/dataset.prompt.md +108 -0
- package/templates/editor/.github/prompts/finetune-apply.prompt.md +91 -0
- package/templates/editor/.github/prompts/finetune.prompt.md +691 -198
- package/templates/editor/.github/prompts/new-agent.prompt.md +3 -1
- package/templates/editor/.github/prompts/new-skill.prompt.md +2 -0
- package/templates/editor/.github/prompts/project-review.prompt.md +4 -3
- package/templates/editor/.github/skills/zen-analyze-run/SKILL.md +483 -0
- package/templates/editor/.github/skills/zen-cli/SKILL.md +9 -1
- package/templates/editor/.github/skills/zen-cli/references/dataset.md +34 -0
- package/templates/editor/.github/skills/zen-cli/references/finetune.md +77 -0
- package/templates/editor/.github/skills/zen-cli/references/inspect.md +47 -9
- package/templates/editor/.github/skills/zen-cli/references/memory.md +33 -10
- package/templates/editor/.github/skills/zen-cli/references/meta.md +61 -0
- package/templates/editor/.github/skills/zen-cli/references/models.md +5 -1
- package/templates/editor/.github/skills/zen-cli/references/rag.md +24 -6
- package/templates/editor/.github/skills/zen-cli/references/sandbox.md +10 -1
- package/templates/editor/.github/skills/zen-code-python/SKILL.md +123 -0
- package/templates/editor/.github/skills/zen-code-python/references/code_python.md +48 -0
- package/templates/editor/.github/skills/zen-dataset/SKILL.md +253 -0
- package/templates/editor/.github/skills/zen-finetune/SKILL.md +1449 -658
- package/templates/editor/.github/skills/zen-finetune/references/readme-template.md +268 -0
- package/templates/editor/.github/skills/zen-finetune/scripts/batch.mjs +390 -0
- package/templates/editor/.github/skills/zen-finetune/scripts/difficult.mjs +243 -0
- package/templates/editor/.github/skills/zen-finetune/scripts/memory.mjs +280 -0
- package/templates/editor/.github/skills/zen-finetune/scripts/next.mjs +398 -0
- package/templates/editor/.github/skills/zen-finetune/scripts/report.mjs +797 -0
- package/templates/editor/.github/skills/zen-finetune/scripts/select.mjs +354 -0
- package/templates/editor/.github/skills/zen-finetune/scripts/usage.mjs +722 -0
- package/templates/editor/.github/skills/zen-inspect/SKILL.md +60 -25
- package/templates/editor/.github/skills/zen-inspect-ask/SKILL.md +270 -0
- package/templates/editor/.github/skills/zen-memory/SKILL.md +18 -14
- package/templates/editor/.github/skills/zen-rag-docs/SKILL.md +20 -8
- package/templates/editor/.github/skills/zen-review/SKILL.md +5 -3
- package/templates/editor/.github/skills/zen-review/scripts/check-paths.sh +5 -4
- package/templates/editor/.github/skills/zen-sandbox/SKILL.md +7 -3
- package/templates/editor/.github/skills/zen-sandbox-capacity/SKILL.md +2 -2
- package/templates/editor/.github/skills/zen-topology/SKILL.md +283 -0
- package/templates/editor/.vscode/settings.json +1 -0
- package/templates/project/agents/files-instructions.md +29 -20
- package/templates/project/agents/memory-instructions.md +31 -32
- package/templates/project/agents/tools-instructions.md +7 -4
- package/templates/project/gitignore +2 -0
- package/dist/meta.d.ts +0 -221
- package/dist/meta.js +0 -684
- package/templates/editor/.github/skills/zen-finetune/scripts/collect.sh +0 -432
- package/templates/editor/.github/skills/zen-finetune/scripts/sample.sh +0 -199
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: zen-dataset
|
|
3
|
+
description: Keep a project's evaluation dataset in `dataset/` with `zen meta dataset` - every case read from its sources with a class, a complexity, tags, a verbatim rubric and an anchor to the section it came from. Covers extracting a training set of any shape into a proposal, applying it as a revision, finding which cases their sources moved under (drift) and re-reading only those sections, settling gone and uncovered sections, overriding a field by hand, leaving notes and verdicts on a case, reading a case's history and the sessions that touched it, and drawing samples by criteria (class, complexity, tag, rubric, revision, verdict, note kind, source, text) stratified, weighted and seeded. Load before building or refreshing a dataset, before running /dataset, before choosing which cases to run, and before writing a note or verdict on a case.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# The dataset
|
|
7
|
+
|
|
8
|
+
A dataset is the project's set of real queries, each with what it should be
|
|
9
|
+
judged by. It lives in `dataset/` at the project root, it is committed, and it
|
|
10
|
+
outlives any one tuning. **Only `zen meta dataset` writes to it.** A hand edit
|
|
11
|
+
skips the history, the revision, the session stamp and the lock, and the next
|
|
12
|
+
drift check will not see it.
|
|
13
|
+
|
|
14
|
+
Reading a source and deciding what is a case is your work. Everything after
|
|
15
|
+
that - what changed, which revision, which cases restart, what to run next - is
|
|
16
|
+
the command's.
|
|
17
|
+
|
|
18
|
+
## What is stored
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
dataset/
|
|
22
|
+
manifest.json revision, a hash per source file, the ignored sections
|
|
23
|
+
revisions.jsonl one line per revision: added, updated, retired, restarted
|
|
24
|
+
cases/<id>.json each case as it is now
|
|
25
|
+
log/<id>.jsonl each case's history: every change, every note, who made it
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
A case:
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"id": "planning-organize-day",
|
|
33
|
+
"rev": 3,
|
|
34
|
+
"status": "active",
|
|
35
|
+
"class": "planning",
|
|
36
|
+
"complexity": "complex",
|
|
37
|
+
"tags": ["calendar", "mail"],
|
|
38
|
+
"input": "organize my day",
|
|
39
|
+
"rubric": [
|
|
40
|
+
{ "id": "r1", "text": "calls api /mail/list" },
|
|
41
|
+
{ "id": "r2", "text": "proposes a schedule, does not just list both" }
|
|
42
|
+
],
|
|
43
|
+
"expected": "A time-ordered plan naming the two conflicting meetings.",
|
|
44
|
+
"source": {
|
|
45
|
+
"file": "SPECIFICATION.md",
|
|
46
|
+
"anchor": { "heading": ["Examples", "Query: organize my day"] }
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- **`rev`** is the dataset revision that last changed the case. A run that
|
|
52
|
+
records `{id, rev}` can always be read back against the rubric it ran under:
|
|
53
|
+
`zen meta dataset show <id>@<rev>`.
|
|
54
|
+
- **Rubric ids** stay with their line. An unchanged line keeps its `r<n>`; a
|
|
55
|
+
new line gets a new one; a note that says `r2 failed` keeps meaning the same
|
|
56
|
+
line.
|
|
57
|
+
- **Nothing is deleted.** A removed case is `retired`: out of every sample,
|
|
58
|
+
still readable, its id never reused.
|
|
59
|
+
|
|
60
|
+
## Extracting cases
|
|
61
|
+
|
|
62
|
+
Read the source yourself and write the structure out; do not write a parser.
|
|
63
|
+
Large sources are read in parts, and the count is checked against the source at
|
|
64
|
+
the end.
|
|
65
|
+
|
|
66
|
+
| In the source | In the case |
|
|
67
|
+
| ---------------------------------------------------------------- | -------------------------------------------------------------------- |
|
|
68
|
+
| A heading like `## Query:` and a quoted string | One case, `input` is the string |
|
|
69
|
+
| A bullet list under `### Rubric:` | `rubric` - **verbatim**, one entry per bullet |
|
|
70
|
+
| An embedded image, a `` link, an audio or PDF attachment | A media part in `input`, path relative to the proposal file |
|
|
71
|
+
| A paragraph of context before the query | `notes`, not `input` - unless the agent is meant to see it |
|
|
72
|
+
| The expected answer | `expected`, one string; it is context for grading, not a diff target |
|
|
73
|
+
| Nothing but a query | A case with no `rubric` |
|
|
74
|
+
|
|
75
|
+
- **The rubric is the source's words.** A paraphrased rubric grades the
|
|
76
|
+
paraphrase. A wrong rubric is fixed in the source and re-read; when the
|
|
77
|
+
source is not yours to edit, `update --rubric-edit ... --override` and say why.
|
|
78
|
+
- **Class** is a distinction the source already makes - a section, an agent,
|
|
79
|
+
an API, a task type. Do not invent a taxonomy.
|
|
80
|
+
- **Complexity** rates the trajectory the query demands, not the sentence:
|
|
81
|
+
|
|
82
|
+
| Level | What it means |
|
|
83
|
+
| --------- | --------------------------------------------------------------------------- |
|
|
84
|
+
| `simple` | One tool call or none; one agent; the answer is a lookup or a restatement |
|
|
85
|
+
| `medium` | Several calls that depend on each other, or one delegation, or one artefact |
|
|
86
|
+
| `complex` | Fan-out, multi-agent, ambiguity to resolve, or a plan that can go wrong |
|
|
87
|
+
|
|
88
|
+
- **Tags** are free words for what cuts across classes - `mail`, `pagination`,
|
|
89
|
+
`impossible`. Use the source's own words; a tag on one case is noise.
|
|
90
|
+
- **Ids** are letters, digits, dot, dash and underscore, `class-short-slug`,
|
|
91
|
+
and **stable**: a case read again from the same section keeps its id. A new
|
|
92
|
+
id for an old case restarts it and orphans its history.
|
|
93
|
+
- **`input` is exactly what `zen run batch` accepts**: a string, or a list of
|
|
94
|
+
parts - a string, `{ "text": "…" }`, or `{ "image" | "audio" | "video" | "file": "<path or url>" }`.
|
|
95
|
+
|
|
96
|
+
### Anchors
|
|
97
|
+
|
|
98
|
+
Every case read from a file names the section it came from, so the command can
|
|
99
|
+
find that section again with no model involved:
|
|
100
|
+
|
|
101
|
+
| Source | Anchor | The section |
|
|
102
|
+
| ---------------------- | ---------------------------------------- | ------------------------------------------------- |
|
|
103
|
+
| Markdown | `{ "heading": "Examples > Query: one" }` | from the heading to the next one at its level |
|
|
104
|
+
| JSON or YAML | `{ "pointer": "/cases/3" }` | that value; key order and formatting do not count |
|
|
105
|
+
| Anything else, or none | no `anchor` | the whole file |
|
|
106
|
+
|
|
107
|
+
A heading path needs only its last name while that is unique in the file; add
|
|
108
|
+
a parent to tell two apart. Headings inside code fences are not headings. An
|
|
109
|
+
anchor that does not resolve to exactly one section is refused at apply.
|
|
110
|
+
|
|
111
|
+
### The proposal
|
|
112
|
+
|
|
113
|
+
Write the cases to a scratch file - `.tmp/dataset/proposal.json` - as
|
|
114
|
+
`{ "cases": [ … ] }`. Media paths in it resolve against that file. Then:
|
|
115
|
+
|
|
116
|
+
```sh
|
|
117
|
+
zen meta dataset apply .tmp/dataset/proposal.json --dry-run
|
|
118
|
+
zen meta dataset apply .tmp/dataset/proposal.json --why "first extraction of SPECIFICATION.md"
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
A whole proposal **retires every active case it does not name**. A refresh of
|
|
122
|
+
a few sections is `--partial`: only the cases it names are touched. Read the
|
|
123
|
+
dry run before writing - an unexpected `retired` or an id you did not mean to
|
|
124
|
+
change is caught there and nowhere else.
|
|
125
|
+
|
|
126
|
+
The old `finetune/dataset.json` (`cases` or `samples`) applies as it stands.
|
|
127
|
+
|
|
128
|
+
## When the sources move
|
|
129
|
+
|
|
130
|
+
```sh
|
|
131
|
+
zen meta dataset drift
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
A source file whose hash is unchanged is not opened. In a file that moved, each
|
|
135
|
+
case's own section is compared, so a typo three sections away restarts nothing.
|
|
136
|
+
|
|
137
|
+
| State | Means | Do |
|
|
138
|
+
| ----------- | ----------------------------------------------------- | --------------------------------------------------------------------- |
|
|
139
|
+
| `changed` | the case's section text differs | re-read that section; put the case in a `--partial` proposal |
|
|
140
|
+
| `gone` | its anchor no longer finds exactly one section | `retire` it, or `reanchor` it if the section was only renamed |
|
|
141
|
+
| `uncovered` | a section at the cases' level that no case comes from | new cases in the proposal, or `ignore <file> --heading "…" --why "…"` |
|
|
142
|
+
| `unsettled` | a file never recorded, because a section is uncovered | settle its uncovered sections |
|
|
143
|
+
|
|
144
|
+
Re-reading a `changed` section and proposing the same case is fine: if what it
|
|
145
|
+
asks, expects and is judged by did not change, nothing is revised - only its
|
|
146
|
+
stored hash moves.
|
|
147
|
+
|
|
148
|
+
**What restarts a case.** A change to `input`, `rubric` or `expected` - the
|
|
149
|
+
question or how it is judged - lists the case under `restarted` in that
|
|
150
|
+
revision; results from its earlier revision are about a different question. A
|
|
151
|
+
change to `class`, `complexity`, `tags`, `notes` or `source` revises the case
|
|
152
|
+
without restarting it.
|
|
153
|
+
|
|
154
|
+
## By hand
|
|
155
|
+
|
|
156
|
+
```sh
|
|
157
|
+
zen meta dataset update <id> --set class=search --set complexity=medium --why "…"
|
|
158
|
+
zen meta dataset update <id> --rubric-edit r2="proposes a schedule" --override --why "…"
|
|
159
|
+
zen meta dataset update <id> --rubric-add "says when it is impossible" --rubric-drop r3 --why "…"
|
|
160
|
+
zen meta dataset update <id> --tag-add impossible --why "…"
|
|
161
|
+
zen meta dataset retire <id>... --why "…" # restore <id>... to undo
|
|
162
|
+
zen meta dataset reanchor <id> --heading "Examples > Query: plan" --why "section renamed"
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
`--set <field>=` with nothing after the `=` clears that field. `--override` keeps the
|
|
166
|
+
change through every later re-extraction; without it the next apply of that
|
|
167
|
+
section writes the source's version back.
|
|
168
|
+
|
|
169
|
+
## Notes, verdicts, history
|
|
170
|
+
|
|
171
|
+
```sh
|
|
172
|
+
zen meta dataset note <id>... -m "…" [--kind graded|analyze|difficult|rubric-suspect|observation] \
|
|
173
|
+
[--run <run>] [--verdict right|wrong|void] [--rubric r1=pass,r2=fail]
|
|
174
|
+
zen meta dataset log [id...]
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
A note is about the case's **current** revision and is recorded with it; after
|
|
178
|
+
the case is revised, the note stays in its history but stops counting. A note
|
|
179
|
+
with a verdict defaults to `graded`. Leave a `rubric-suspect` note when a case
|
|
180
|
+
fails for a reason the rubric cannot be right about - the dataset prompt lists
|
|
181
|
+
them until someone fixes the source.
|
|
182
|
+
|
|
183
|
+
Every change and note records who made it: the `zen meta` session, the prompt
|
|
184
|
+
it ran (`/dataset`, `/analyze`, …) and the host. `log` prints
|
|
185
|
+
`resume: zen meta resume <project> <session>` for every session this machine
|
|
186
|
+
still holds.
|
|
187
|
+
|
|
188
|
+
## Drawing a sample
|
|
189
|
+
|
|
190
|
+
```sh
|
|
191
|
+
zen meta dataset sample [filters] [-n <count>] [--seed <n>] [--by <fields>] \
|
|
192
|
+
[--weight <stratum>=<w>] [--order <keys>] [--format ids|batch|cases|json] [-o <file>]
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Filters** - all must hold; a repeated flag means any of its values:
|
|
196
|
+
|
|
197
|
+
| Flag | Keeps |
|
|
198
|
+
| ---------------------------------------- | ----------------------------------------------------------- |
|
|
199
|
+
| `--class`, `--complexity`, `--tag` | those values (`unclassified`, `unrated` for none) |
|
|
200
|
+
| `--status active\|retired\|all` | default `active` |
|
|
201
|
+
| `--rubric yes\|no`, `--expected yes\|no` | cases with or without one |
|
|
202
|
+
| `--id <glob>`, `--exclude <glob>` | ids matching, ids not matching |
|
|
203
|
+
| `--ids-from <file>` | ids listed - plain, or json with `ids`, `batch`, `cases` |
|
|
204
|
+
| `--changed-since <rev>` | revised after that revision |
|
|
205
|
+
| `--restarted` | restarted by the latest revision (or the `--at` one) |
|
|
206
|
+
| `--at <rev>` | the dataset as it stood then |
|
|
207
|
+
| `--verdict right\|wrong\|void` | the latest verdict on the current revision |
|
|
208
|
+
| `--never-graded` | no verdict on the current revision |
|
|
209
|
+
| `--note <kind>`, `--graded-in <run>` | has a note of that kind, or one from that run |
|
|
210
|
+
| `--source <glob>`, `--anchor <glob>` | read from that file, or that section |
|
|
211
|
+
| `--grep <text>` | input or rubric contains it (`--regex`, `--case-sensitive`) |
|
|
212
|
+
|
|
213
|
+
A value the dataset does not have - a misspelt class - is an error that lists
|
|
214
|
+
the real ones, never an empty sample.
|
|
215
|
+
|
|
216
|
+
**The draw.** Cases are grouped into strata by `--by` (default `class`; also
|
|
217
|
+
`complexity`, `tag`, `source`, `rubric`, `verdict`, several joined by commas,
|
|
218
|
+
or `none`). Inside a stratum they are ordered by `--order` (default
|
|
219
|
+
`rubric,complexity`: graded first, then complex, medium, simple; also
|
|
220
|
+
`verdict` - wrong first, `rev` - newest first, `id`), ties broken by `--seed`.
|
|
221
|
+
Strata take turns, `--weight alpha=2` giving one twice the turns. The whole
|
|
222
|
+
order is laid out before `-n` cuts it, so **a larger `-n` keeps every case a
|
|
223
|
+
smaller one chose**, and the same filters, seed and revision draw the same cases
|
|
224
|
+
on any machine.
|
|
225
|
+
|
|
226
|
+
**Output.** `ids` (default) one per line; `batch` - `{ "batch": [{ id, input }] }`
|
|
227
|
+
for `zen run batch`, **never a rubric**; `cases` - whole cases with rubrics, for
|
|
228
|
+
a grader; `json` - the ids with the criteria, seed, revision and per-stratum
|
|
229
|
+
counts, which is the record that reproduces the sample. Media paths are written
|
|
230
|
+
relative to the `-o` file. The per-stratum table goes to stderr.
|
|
231
|
+
|
|
232
|
+
```sh
|
|
233
|
+
# a cross-section of 12 graded cases
|
|
234
|
+
zen meta dataset sample --rubric yes -n 12 --format batch -o runs/r1/cases.json
|
|
235
|
+
# everything the latest revision restarted
|
|
236
|
+
zen meta dataset sample --restarted --by none --format batch -o runs/r2/cases.json
|
|
237
|
+
# what is still wrong, worst classes first
|
|
238
|
+
zen meta dataset sample --verdict wrong --order complexity --weight search=2
|
|
239
|
+
# the whole dataset, rubrics included, for another machine
|
|
240
|
+
zen meta dataset export -o dataset.json
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
`export [id...]` is the same filters with no strata, in id order, as `cases`
|
|
244
|
+
by default.
|
|
245
|
+
|
|
246
|
+
## Rules
|
|
247
|
+
|
|
248
|
+
- Only `zen meta dataset` writes `dataset/`.
|
|
249
|
+
- Every write says `--why`, in terms of the source: what changed in it, or why
|
|
250
|
+
it is being overridden.
|
|
251
|
+
- Rubrics leave the dataset only through `--format cases` or `export`. Never
|
|
252
|
+
put one in a batch input, a prompt, a skill or the workspace an agent reads.
|
|
253
|
+
- Moving a rubric to match what an agent did is not a fix; it deletes the test.
|