---
name: echospace-pilot
description: Forecast whether curating training data toward a target domain will pay before spending compute, using the Echo Program pilot service: selftest, forecast, local selection, outcome receipt. Use when a task involves training-data selection or curation, choosing a keep list for a target, comparing targeted against random data, or reporting a training run's result to the pilot.
---

# Echo Program pilot

### Setup

```bash
curl -O https://echo-program.com/client/echospace_pilot.py      # Python 3, no dependencies
export ECHOSPACE_URL=https://api.echo-program.com
export ECHOSPACE_API_KEY=es_pilot_...                     # from the member's dashboard; never commit it
python3 echospace_pilot.py selftest                       # once per machine
```

### Workflow

- Put target documents in one folder and candidate-pool documents in another. One file is one document; a `.jsonl` file is one document per line under `text`.
- Forecast: `python3 echospace_pilot.py forecast --target T/ --pool P/ --label NAME --model-params N --keep 0.25 --language en --regime pretraining --table --out fc_NAME.json`. Always pass `--model-params`, `--keep`, `--language`, `--regime`: the scope card depends on them.
- Read `verdict` and `confidence` from the saved JSON. Act by the verdict table below. Never override a `DO-NOT-SELECT` with a targeted keep list.
- On `SELECT`: `python3 echospace_pilot.py select-local --forecast fc_NAME.json --pool P/ --keep 0.25 --out keep_NAME.json`. `keep_indices` are pool document indices in the client's read order (sorted file names, recursive, then `.jsonl` line order). Build the training set from them.
- On `DO-NOT-SELECT`: train on a uniform random sample of the pool of the same size. That is the recommendation, not a fallback.
- On `NO-FORECAST`: do not curate on this evidence. Add target data and forecast again.
- After training, report: `python3 echospace_pilot.py outcome --forecast fc_... --selected <curated metric> --baseline <random metric> --metric "held-out loss" --acted both`. Train both arms when the budget allows.

| Verdict | Action |
| --- | --- |
| `SELECT` | curate with the scoring table via `select-local`; keep the top fraction |
| `DO-NOT-SELECT` | random sample of the same size; keep the compute |
| `NO-FORECAST` | no curation decision; add target data, rerun |

### Rules

- Never upload a large pool: `forecast` sends samples and `select-local` scores the pool locally. Use `select` (server-side keep list) only for small pools.
- Never port the hasher without running the `/v1/hasher` test vectors first; a drifted hasher yields a silently wrong keep list.
- Minimums: target about 2,600 words in two or more documents; pool at least four times the target. A 422 tells you which is short.
- Quota: 50 engine calls per key per 24 hours (`forecast` and `select`). `selections`, `outcome`, `me`, `hasher` are free.
- Keep every `fc_*.json` and `keep_*.json` with the training run; the fingerprint ties the forecast to the exact text.
- Confidence `low` or a note about the validated range means the job is outside what the service has been checked on; say so in your report to the human.
- Outputs are forecasts, not guarantees. The training decision belongs to the human; present the verdict, the confidence, and the notes.

### Reference

- Full API reference: https://echo-program.com/llms-full.txt (also https://echo-program.com/docs)
- OpenAPI: https://api.echo-program.com/v1/openapi.json
- Reference client: https://echo-program.com/client/echospace_pilot.py
