The Docker sidecar
You get a docker-compose.yml with your enrollment key baked in. Drop it next to
your app:
docker compose up -d
Your app now has a local inference API:
curl -s localhost:8080/predict \
-H 'Content-Type: application/json' \
-d '{"records": [{"features": [0.1, 0.2, 0.3, 0.4]}]}'
# {"served_version": 7, "predictions": [1]}
The local API
Endpoints, all on localhost:
| Method | Path | What |
|---|---|---|
POST |
/predict |
inference against the currently promoted model |
GET |
/model |
which version is being served |
GET |
/health |
liveness + readiness (for your orchestrator) |
POST |
/ingest |
append a record to the local training buffer |
DELETE |
/ingest |
erase data (see Consent & erasure) |
GET/PUT |
/participation |
the training opt-in switch |
POST /predict returns 503 until a model has been promoted — a real,
retryable state, not an error. The daemon keeps serving the last known good model
across restarts and through network outages.
Feeding it data
curl -s localhost:8080/ingest -X POST \
-H 'Content-Type: application/json' \
-d '{"record": {"temp": 21.5, "faulty": false}, "subject_id": "user-123"}'
The buffer is encrypted at rest with a key generated on that machine, bounded
by the admin's retention policy (max age and max size, oldest evicted first).
subject_id is optional and stored only as a keyed hash — there is no plaintext
list of who is in the buffer.