Prime Runs SDK
Track evaluation and training runs on the Prime Intellect platform: init()
opens the run, records stream out while it proceeds, and finish() closes it
out with a terminal status.
Install
uv add prime-runs # or: pip install prime-runs
uv add 'prime-runs[train]' # training runs: adds pyarrow for the sample table
Eval runs
import prime_runs as pr
run = pr.init(
name="gsm8k-qwen3-8b",
environments=["gsm8k"], # hub names (get-or-create) or owner/name slugs
model="Qwen/Qwen3-8B",
framework="verifiers",
config="eval.toml", # the launched file, stored byte for byte
)
print(run.url) # https://app.primeintellect.ai/dashboard/evaluations/...
for episode in rollouts:
run.log_episodes([episode]) # a queue put; bare traces: log_traces()
run.finish(summary=pr.metrics.from_episodes(episodes))
init() is called before the first rollout. Every record the run uploads is
keyed to it: the SDK sets run.id and run.type on the uploaded copy of each
trace and episode, over whatever run id the producer recorded locally, and
keeps the rest of that block (name, work). A producer never needs to know
the platform's id; run.url is the handle. A with run: block finishes for
you: an exception marks the run failed, Ctrl-C cancelled, and a process
that exits without finishing is reported crashed by an atexit hook.
config= takes the path to the launched file (kept verbatim under
config_source, comments and all) or a mapping stored as given; put a file
under pr.CONFIG_SOURCE_KEY in the mapping to send both. Nothing is redacted.
Training runs
run = pr.init(
kind="train",
name="qwen3-8b-gsm8k-rl",
model="Qwen/Qwen3-8B", # the base model
environments=["primeintellect/gsm8k"], # hub ids, passed through
training=pr.TrainingSpec(max_steps=1000, batch_size=64, rollouts_per_example=8),
config=train_config.model_dump(),
team_id="team_...", # external runs belong to a team
)
for step, (episodes, metrics) in enumerate(training_loop):
run.log_episodes(episodes) # episodes carry run.work.step (TrainRunInfo)
run.log_metrics(metrics, step=step)
run.finish()
- The platform enables external runs per team; a team outside the allowlist
gets a
ForbiddenErrorfrominit(). init(kind="train", id=os.environ["RUN_ID"])attaches to a run a launcher already created: nothing is registered, the platform keeps the run's failure marking, and a cleanfinish()still completes it. A hosted run (one the platform launched) is reachable only through the platform's internal RFT root: pass thePRIME_API_BASEits launcher injects (…/api/internal/rft) asbase_url=and the SDK addresses that router, sending the run's token asx-api-keytoo. Registering a run or setting its status is not available there; the public API answers 400 for a hosted run's id.- Metrics are one row per
log_metricscall, on their own uploader. The sample table gets one Parquet object per upload, every 10th step, keyed by the step an episode was dispatched at; a step logged in several calls gets several objects, and the viewer shows their union. - The status vocabulary is
completed | failed;cancelledandcrashedarrive asfailedwith the reason inerror_message.
How it behaves
- Streams. Records go out on a background thread as they are logged; whatever queues up during one request goes out as the next.
- Contains its errors. With the default
on_error="warn"nothing the platform raises escapes into your loop;on_error="raise"surfaces the first failure fromflush()orfinish(), for tests and CI. Platform errors are theprime_tracesexception family. - Degrades. A transient failure costs its batch, three in a row retire the
sink (a training run pauses it for five minutes instead), and a full queue
drops records rather than stalling the run. Losses are counted in
run.dropped_recordsandrun.failed_records. - Drains on exit.
finish()gives queued uploads up tofinish_timeout(300 s) before closing the run out; an abort path can passfinish(timeout=...).
An online run writes to Prime Traces (the system of record, gated to an
allowlist; outside it that sink turns itself off quietly) and to the sample
table today's viewer reads. log_*() are queue puts, safe inside a coroutine;
init() and finish() do network I/O.
Configuration
| Source | Meaning |
|---|---|
PRIME_API_KEY |
Platform API token |
PRIME_TEAM_ID |
Team context; required for training runs |
PRIME_API_BASE_URL |
Platform API; defaults to https://api.primeintellect.ai |
PRIME_FRONTEND_URL |
Dashboard; defaults to https://app.primeintellect.ai |
PRIME_TRACES_URL |
Prime Traces service, resolved by prime-traces |
PRIME_RUNS_MODE |
online or disabled; unset means online when there is an API key |
~/.prime/config.json |
Shared prime CLI config (api_key, team_id, base_url) |
Precedence is init() argument → environment variable → config file. A missing
API key disables the run with a warning. base_url is normally the platform
origin; the internal RFT root a hosted training run is given
(…/api/internal, with or without /rft) is accepted too and switches the
client to that router (attached runs only).
Not yet available
- Failed or cancelled evaluations on the dashboard. The evaluations API has
no producer-facing status endpoint yet, so the terminal state is recorded
under
metadata.prime_runsand the run keeps showing as running.
Related packages
- prime-traces — Prime Traces SDK
- prime — Prime CLI
- prime-evals — Evals SDK
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file prime_runs-0.1.2.tar.gz.
File metadata
- Download URL: prime_runs-0.1.2.tar.gz
- Upload date:
- Size: 62.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2cd4775aa3176f95abf3def78ba257b6b0579ba2606d24307c88495e5b1bb6f1
|
|
| MD5 |
29be646c6930f592c0c7d2e06ac47baa
|
|
| BLAKE2b-256 |
dbee0e9cf800aa6b3db148b01d26e0d6957074027f52323b348ad35594e41d1c
|
Provenance
The following attestation bundles were made for prime_runs-0.1.2.tar.gz:
Publisher:
release-runs.yml on PrimeIntellect-ai/prime
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
prime_runs-0.1.2.tar.gz -
Subject digest:
2cd4775aa3176f95abf3def78ba257b6b0579ba2606d24307c88495e5b1bb6f1 - Sigstore transparency entry: 2763719953
- Sigstore integration time:
-
Permalink:
PrimeIntellect-ai/prime@7fa386d9a7424b4b3d841111d4c89445b8fe8eee -
Branch / Tag:
refs/heads/main - Owner: https://github.com/PrimeIntellect-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-runs.yml@7fa386d9a7424b4b3d841111d4c89445b8fe8eee -
Trigger Event:
push
-
Statement type:
File details
Details for the file prime_runs-0.1.2-py3-none-any.whl.
File metadata
- Download URL: prime_runs-0.1.2-py3-none-any.whl
- Upload date:
- Size: 43.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
95ca0775317cf2733aa38a0a26b263174b992d5be63009a4cfeeff212924759b
|
|
| MD5 |
590e8e15c890cfc5c74473f3fcf14412
|
|
| BLAKE2b-256 |
3759e48470b0b47d3fc261e31e13d1ed47177f0a71044234ae46b40b00063f1c
|
Provenance
The following attestation bundles were made for prime_runs-0.1.2-py3-none-any.whl:
Publisher:
release-runs.yml on PrimeIntellect-ai/prime
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
prime_runs-0.1.2-py3-none-any.whl -
Subject digest:
95ca0775317cf2733aa38a0a26b263174b992d5be63009a4cfeeff212924759b - Sigstore transparency entry: 2763719980
- Sigstore integration time:
-
Permalink:
PrimeIntellect-ai/prime@7fa386d9a7424b4b3d841111d4c89445b8fe8eee -
Branch / Tag:
refs/heads/main - Owner: https://github.com/PrimeIntellect-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-runs.yml@7fa386d9a7424b4b3d841111d4c89445b8fe8eee -
Trigger Event:
push
-
Statement type: