Contribute a machine to the QuickSilver Pro compute pool and earn API credit. This is a small, single-file reference client: it does not run a model — it connects your machine to the pool and forwards each request to a local OpenAI-compatible server you already run.
No Mac required. The pool protocol makes no assumption about your hardware or
inference engine. A Linux box with an NVIDIA GPU serving a model through vLLM
contributes exactly the same way a Mac does — anything that speaks
/v1/chat/completions works: vLLM, llama.cpp's server, Ollama, LM Studio, MLX,
TGI.
customer ──▶ QuickSilver API ──▶ relay ──▶ (WebSocket you dialed out) ──▶ your machine
│
your local OpenAI-compatible server
- You register once with your account's provider key and get back a short-lived share key plus the relay's address.
- You open one outbound WebSocket to the relay. No inbound ports, no port forwarding, no public IP.
- The relay pushes each customer request down that socket; you replay it against your local server and stream the answer back up the same socket.
- A heartbeat every few seconds reports your spare capacity.
There is no polling, no job queue, and no result upload.
1. Get a provider key. In the QuickSilver dashboard, create a compute
provider key (starts with qsppk-). It is shown once — save it. It authorizes
registering a node for your account; it cannot spend money.
2. Run a local model server that exposes an OpenAI-compatible API. For example, with vLLM:
vllm serve <your-model-weights> --served-model-name glm-5.3-flash --port 8000The pool identifies models by a catalog id (e.g. glm-5.3-flash). Your
server's readiness is checked by whether its response echoes that id exactly, so
either serve under the catalog id (as above with --served-model-name) or use
--local-model below to bridge the names.
3. Install this client and run it:
pip install websockets httpx
export QSP_PROVIDER_KEY=qsppk-...
python pool_node.py --model glm-5.3-flash --upstream http://localhost:8000If your server serves the model under a different name than the catalog id:
python pool_node.py --model glm-5.3-flash \
--upstream http://localhost:8000 \
--local-model GLM-5.3-Flash-EXL3The client rewrites the model name outbound to your server and back to the catalog id in the response, so the pool's readiness probe passes.
| flag | default | meaning |
|---|---|---|
--model |
required | Pool catalog id to serve, e.g. glm-5.3-flash. |
--upstream |
http://localhost:8000 |
Base URL of your local OpenAI-compatible server. The relay's request path (e.g. /v1/chat/completions) is appended verbatim, so give the host without /v1. |
--local-model |
(none) | If your server serves the model under a name other than --model, its local name. |
--provider-key |
$QSP_PROVIDER_KEY |
Your qsppk- provider key. Prefer the env var. |
--worker |
machine hostname | Per-machine label. Two machines on one account must use distinct values. |
--max-concurrency |
2 |
Concurrent request slots to advertise (clamped 1–64). |
Payout is a share of the catalog list price for the model you serve, credited to your QuickSilver account balance (API usage credit, not cash). Your own account's traffic does not earn. There are monthly caps per node and per pool. See the dashboard for current rates and your node's earnings.
Reading your earnings programmatically. The dashboard shows your ledger, and
you can also pull it from the API: GET /v1/pool/ledger returns period-aggregated
credit per node (request counts, tokens, accrued vs. final credit, status, the
caps). Authenticate with a read-only key (qsprk-), a credential that only
reads your ledger — it cannot spend or register nodes, so it is safe to store in a
tool long-term. Generate one in the dashboard under Share Compute → Read-only
earnings keys. (The qsppk- provider key also works, but prefer the read key so
a tool never has to keep a credential that can register nodes.)
- Keep both keys. Recovery after a dropped connection means re-registering,
which only the
qsppk-provider key can do. Store it alongside the share key. - Leaving the pool is an operator action — contact support. Revoking your provider key stops new registrations but does not stop an already-registered node from serving.
- This is a reference implementation. It aims to be short and readable so you can audit exactly what it does and adapt it; it is not a supported product.
Python 3.9+ and pip install websockets httpx (or pip install -r requirements.txt).
MIT — see LICENSE. This is a reference implementation; fork it and adapt it freely.