Private GPU private silicon

A private GPU is an on-demand, dedicated LLM host that is yours for the duration of a session (a “burst”). You start it through the API, infer on it exactly like any OpenAI-compatible model, and stop it when you’re done — paying only for the time it runs.

How it relates to your org & user (console)

Private GPUs are per user, billed to the user’s org. Configuration happens in the console before you can start anything:

Your API key does the rest — the same rk-… key you use for public models authenticates all private-GPU endpoints and ties the burst to you + your org.

Endpoints

PurposeEndpointAuth
Start a burstPOST /v1/gpu/burstsAPI key
List your burstsGET /v1/gpu/burstsAPI key
Stop a burstPOST /v1/gpu/bursts/:id/stopAPI key
Discover the modelGET /v1/modelsAPI key
Infer on the GPUPOST /v1/chat/completions "model":"seligo/gpu"API key

1. Start a burst

POST /v1/gpu/bursts with an offering id (a UUID your org is entitled to) and a duration in minutes. You will already have the offering id from staff; on the console it is shown on the GPU page.

curl -s -X POST "$SELIGO_BASE/gpu/bursts" \
  -H "authorization: Bearer rk-…" \
  -H "content-type: application/json" \
  -d '{"offering_id":"<offering-uuid>","duration_min":60}'

A successful start returns 201 with your new burst (including its id and the session slug):

{"burst":{"id":"<burst-uuid>","slug":"burst-…","status":"pending",
            "auto_end_at":"2026-09-15T18:00:00Z", …}}
You pay from the moment the burst is approved until it is stopped or hits auto_end_at, even while the GPU is still booting. Stop it when you’re done.

2. Wait for it to be ready

A cold GPU takes several minutes to boot (a warm boot is faster). Poll your bursts:

curl -s "$SELIGO_BASE/gpu/bursts" -H "authorization: Bearer rk-…"

The status moves through pending / provisioning / booting_warmready (then draining / ended after stop). Once ready, GET /v1/models lists the stable seligo/gpu alias for your key:

curl -s "$SELIGO_BASE/models" -H "authorization: Bearer rk-…" \
  | grep -i "seligo/gpu"

3. Infer on the GPU

Use the stable alias seligo/gpu as the model. It always resolves to your live, ready burst — so your client code never needs to know the per-session endpoint id.

curl -s "$SELIGO_BASE/chat/completions" \
  -H "authorization: Bearer rk-…" \
  -H "content-type: application/json" \
  -d '{"model":"seligo/gpu",
       "messages":[{"role":"user","content":"Analyse this data residency question"}]}'

While the burst is still booting, calls to seligo/gpu return 409 with code gpu_booting. If no burst is live for your key they return 404 gpu_not_started — start one first (step 1).

Retry on gpu_booting (e.g. with backoff) until the burst reports ready. Handle gpu_not_started by starting a burst rather than failing hard.

4. Stop the burst

Stop when done so you stop paying:

curl -s -X POST "$SELIGO_BASE/gpu/bursts/<burst-uuid>/stop" \
  -H "authorization: Bearer rk-…"

The burst drains (finishes in-flight work) then the GPU is torn down and deregistered. A refund is settled for the unused reserved time.

Chat UI equivalent

If you use the Seligo chat interface in the console, it drives the same machinery: the picker shows a purple Private GPU row when you have a live burst, and chat turns are relayed to your GPU through the same router. The console GPU page shows offerings, entitlements, your live burst (uptime + auto-stop), and lets you start and stop it without writing any curl.

End to end: start → poll GET /v1/gpu/bursts until ready → infer on model: "seligo/gpu" → stop. See API reference for the shared OpenAI-compatible details.