Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ PRISM is a research challenge on a pinned
[NeMo AutoModel](https://github.com/NVIDIA-NeMo/Automodel) base: you fork the
operator pin, edit under that tree, and submit a **unified git diff**. The
operator applies your patch fail-closed, then re-executes training on a
miner-funded **1× NVIDIA B200** Lium pod against a pinned FineWeb-Edu shard.
Live leaf score is the **equal-weight G2 public-suite mean**
miner-funded **1× NVIDIA B200** (Lium or Verda) against a pinned FineWeb-Edu
shard. Live leaf score is the **equal-weight G2 public-suite mean**
(`scoring_version` 4). This is a **new competition** (`prism-v2.1` /
`scoring_generation` 21): old 2.0 scores cannot win. There is **no** miner
Docker image, no CVM, no on-chain write from miners — HTTP submit only.
Expand All @@ -41,7 +41,7 @@ Docker image, no CVM, no on-chain write from miners — HTTP submit only.
| Staging gateway | `http://staging.api.joinbase.ai` |
| Submit path | `/challenge/prism/v1/submissions` |
| Recipe | **2.1.0** — AutoModel pin + patch (`automodel@v0.5.0`), 1× B200 |
| Live GPU | Miner-funded Lium — pass `X-Lium-Api-Key` |
| Live GPU | Miner-funded **Lium** (`X-Lium-Api-Key`) or **Verda** (`X-Verda-Client-Id` + Secret + Inference-Key) |

This repository holds **miner documentation and examples only**. Control-plane
source lives in [BaseIntelligence/base](https://github.com/BaseIntelligence/base).
Expand All @@ -52,8 +52,8 @@ source lives in [BaseIntelligence/base](https://github.com/BaseIntelligence/base
2. `GET /v1/recipe` — copy `automodel_pin_id`, `automodel_git_commit`, and caps.
3. Checkout that AutoModel commit → edit → `git diff <commit> > automodel.patch`.
4. Pack `automodel.base` + `automodel.patch` (+ optional `prism.toml` /
`requirements.txt`) and submit with your hotkey + **`X-Lium-Api-Key`**
see [Submit](docs/submit.md). Worked example: [LoopMoE](examples/loopmoe/).
`requirements.txt`) and submit with your hotkey + **`X-Lium-Api-Key`** or
Verda BYOK — see [Submit](docs/submit.md). Worked example: [LoopMoE](examples/loopmoe/).
5. Poll events until `terminated`, then check G2 benches — see [API](docs/api.md).

```bash
Expand All @@ -79,5 +79,5 @@ curl -sS -X POST "$GATEWAY/challenge/prism/v1/submissions" \
2. **Wrong pin / stale diff** — `automodel.base` must equal live
`automodel_pin_id` (`automodel@v0.5.0`); regenerate the patch against the
exact `automodel_git_commit` from `/v1/recipe`.
3. **Missing `X-Lium-Api-Key`** — live eval runs on **your** Lium account.
Missing key → `400 missing_lium_api_key`.
3. **Missing compute key** — live eval runs on **your** Lium or Verda account.
Missing headers → `400 missing_lium_api_key`.
3 changes: 2 additions & 1 deletion docs/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ Precheck errors: same membership/contract codes, plus
## Auth note

Miner routes identify you by hotkey (`X-Miner-Hotkey` or JSON `miner_hotkey`).
On live, also send **`X-Lium-Api-Key`** (your funded Lium account). Never send
On live, also send **`X-Lium-Api-Key`** **or** the Verda BYOK triplet
(`X-Verda-Client-Id` / Secret / Inference-Key). Never send
challenge signing keys or gateway owner keys from a miner client.

## Next
Expand Down
17 changes: 14 additions & 3 deletions docs/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ prism.toml # optional — entry / model-config knobs
4. Produce a unified diff against the pin commit, e.g.
`git diff <automodel_git_commit> > automodel.patch`.
5. Write `automodel.base` as a single line equal to `automodel_pin_id`, pack
the ZIP, and `POST /v1/submissions` with your hotkey + **`X-Lium-Api-Key`**.
the ZIP, and `POST /v1/submissions` with your hotkey + **`X-Lium-Api-Key`**
**or** Verda BYOK (`X-Verda-Client-Id`, `X-Verda-Client-Secret`,
`X-Verda-Inference-Key`).

Models must stay **≤ 1B parameters**. Recipe-v10 pods expose four GPUs;
train from `ctx["train_stream"]` (rank 0 owns the stream under DDP). Miner
Expand All @@ -39,13 +41,22 @@ Do not ship Megatron-Bridge or other non-AutoModel frameworks.

## Pay for your own GPU (required on live)

Create a [Lium](https://lium.io) account, fund it, and pass your API key on
every live submit:
Create a [Lium](https://lium.io) **or** [Verda](https://verda.com) account,
fund it, and pass **one** provider on every live submit:

```http
X-Lium-Api-Key: <your Lium API key>
```

```http
X-Verda-Client-Id: <oauth client id>
X-Verda-Client-Secret: <oauth client secret>
X-Verda-Inference-Key: <inference token>
```

`X-Verda-Api-Key` aliases the inference token. If both providers are complete,
set `X-Compute-Provider: lium` or `verda`.

The key is held in master memory for that submission and may also land in a
**short-TTL encrypted seal file** on the master host (never in Postgres, never
logged) so a control-plane restart can still stop your pod. Missing key on
Expand Down
24 changes: 18 additions & 6 deletions docs/prism.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ prism.toml # optional — entry / model-config knobs
4. Produce a unified diff against the pin commit, e.g.
`git diff <automodel_git_commit> > automodel.patch`.
5. Write `automodel.base` as a single line equal to `automodel_pin_id`, pack
the ZIP, and `POST /v1/submissions` with your hotkey + **`X-Lium-Api-Key`**.
the ZIP, and `POST /v1/submissions` with your hotkey + **`X-Lium-Api-Key`**
**or** Verda BYOK (`X-Verda-Client-Id`, `X-Verda-Client-Secret`,
`X-Verda-Inference-Key`).

Models must stay **≤ 1B parameters**. Miner **model code** (build/train/
eval) runs with **no network** (`unshare --net`) beyond the operator-owned
Expand Down Expand Up @@ -110,19 +112,29 @@ this document. It is an example, not a scored baseline.
**Diff visibility.** After intake, inspect your applied delta at
`GET /v1/submissions/{id}/diff` (full unified diff + diffstat / classification).

Evaluation runs on **miner-funded** Lium GPU pods (you pay the rent). Master
still operates the pod over SSH; you do **not** deploy a miner CVM. CI uses
`SimLiumBackend` and does not need a key.
Evaluation runs on **miner-funded** GPUs (Lium SSH pods or Verda serverless
jobs). You pay the rent. Master still operates the job; you do **not**
deploy a miner CVM. CI uses `SimLiumBackend` and does not need a key.

## Pay for your own GPU (required on live)

Create a [Lium](https://lium.io) account, fund it, and pass your API key on
every live submit:
Create a [Lium](https://lium.io) **or** [Verda](https://verda.com) account,
fund it, and pass **one** provider on every live submit:

```http
X-Lium-Api-Key: <your Lium API key>
```

```http
X-Verda-Client-Id: <oauth client id>
X-Verda-Client-Secret: <oauth client secret>
X-Verda-Inference-Key: <inference token>
```

`X-Verda-Api-Key` aliases the inference token. If both providers are
complete, set `X-Compute-Provider: lium` or `verda`. You cannot set
`image` / `cmd` / `template` — operator pin only.

The key is held in master memory for that submission and may also land in a
**TTL-bounded encrypted seal file** on the master host (default ≥36h; never in
Postgres, never logged). Master **re-seals** on measure start and heartbeats
Expand Down
3 changes: 2 additions & 1 deletion docs/submit.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ Preferred path: a **ZIP** through the production or staging gateway with
| Method / URL | `POST {GATEWAY}/challenge/prism/v1/submissions` |
| `Content-Type` | `application/zip` |
| `X-Miner-Hotkey` | 64 lowercase hex |
| `X-Lium-Api-Key` | your Lium API key (required on live) |
| `X-Lium-Api-Key` | Lium API key (live, if you pay Lium) |
| `X-Verda-Client-Id` / `X-Verda-Client-Secret` / `X-Verda-Inference-Key` | Verda BYOK (live, if you pay Verda). `X-Verda-Api-Key` aliases the inference token. If both providers are complete, add `X-Compute-Provider: lium` or `verda`. You cannot set `image` / `cmd` / `template`. |
| Body | raw zip bytes (`automodel.base` + `automodel.patch` at the root) |

```bash
Expand Down
7 changes: 5 additions & 2 deletions docs/troubleshooting.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,12 @@
| `similar: true` on precheck | Would hit intake copy gate | Change the patch vs prior champions; starting from the operator pin is fine |
| `429 precheck_quota_exceeded` | 3 prechecks/coldkey/UTC day used | Wait until next UTC day; rotating hotkeys does not reset |
| `control_plane_restart` / `harness_detached` | Challenge process restarted mid-pod | Stop the Lium pod if still billing; resubmit with `X-Lium-Api-Key` |
| `400 missing_lium_api_key` | Live path needs miner-funded Lium | Pass `X-Lium-Api-Key` (your Lium account); see [Submit](submit.md) |
| `400 missing_lium_api_key` | Live path needs miner-funded Lium or Verda | Pass `X-Lium-Api-Key` or the Verda header triplet; see [Submit](submit.md) |
| `400 missing_verda_credentials` | Verda headers incomplete | Send client id, secret, and inference key |
| `400 ambiguous_compute_provider` | Both Lium and Verda complete | Add `X-Compute-Provider: lium` or `verda` |
| `400 miner_image_override` | JSON set image/cmd/template | Remove those fields — operator pins the container |
| **409 `not_failed`** on `/retry` | Row is not `failed` | `/retry` only recovers **failed** rows. Re-POSTing the identical ZIP is `already-queued` (no new GPU). After infra failure: `POST .../retry` with **`X-Lium-Api-Key`** (hotkey/Bearer alone is not enough) |
| **400 `missing_lium_api_key`** on `/retry` | Need another GPU rent | Pass `X-Lium-Api-Key` on live (same header as submit) |
| **400 `missing_lium_api_key`** on `/retry` | Need another GPU rent | Pass `X-Lium-Api-Key` or Verda BYOK on live |
| Non-5090 / slow tok/s vs peers | Marketplace drew another SKU | Prism hard-pins **1× RTX 5090**; non-5090 is rejected at rent (no silent score normalize) |
| `403 hotkey_not_in_metagraph` | Hotkey not registered | Check the hex (64 lowercase, no `0x`) |
| `409 submission_gated` | 1-max slot already used | One accepted patch per hotkey; identical pin+patch is idempotent |
Expand Down
Loading