A Node.js application that automatically provisions DigitalOcean Dedicated Inference deployments when GPU capacity becomes available. It periodically checks available Dedicated Inference capacity and creates deployments up to your desired global count.
- Automatic provisioning for Dedicated Inference
- Periodic polling for current capacity
- Desired count management (global across configured regions)
- Multi-region failover by checking/trying regions in order
- Webhook notifications for provisioning events
- Docker support for worker-style deployment
- DigitalOcean API token with Dedicated Inference permissions
- Node.js 22+ (for direct execution)
- Existing VPC UUID in your target region(s)
- Install dependencies:
npm install- Run:
DO_API_TOKEN="your-do-token" npm start -- \
--region="tor1,nyc2" \
--model_slug="mistral/mistral-7b-instruct-v3" \
--accelerator_slug="gpu-mi300x1-192gb" \
--vpc_uuid="your-vpc-uuid" \
--desired_count=1 \
--accelerator_scale=1 \
--accelerator_type="prefill_decode" \
--enable_public_endpoint=true \
--check_interval_seconds=30 \
--name_prefix="my-di"Optional flags:
--hugging_face_token(for gated Hugging Face models)--webhook_url(notifications, including Slack incoming webhook support)
docker build -t di-grabber .
docker run -d \
-e DO_API_TOKEN="your-do-token" \
-e REGION="tor1,nyc2" \
-e MODEL_SLUG="mistral/mistral-7b-instruct-v3" \
-e ACCELERATOR_SLUG="gpu-mi300x1-192gb" \
-e VPC_UUID="your-vpc-uuid" \
-e DESIRED_COUNT="1" \
-e ACCELERATOR_SCALE="1" \
-e ACCELERATOR_TYPE="prefill_decode" \
-e ENABLE_PUBLIC_ENDPOINT="true" \
-e CHECK_INTERVAL_SECONDS="30" \
-e NAME_PREFIX="my-di" \
-e WEBHOOK_URL="https://webhook.site/<id>" \
--name do-di-grabber \
di-grabberEvery polling cycle, the application:
- Lists existing Dedicated Inference deployments in the configured regions
- Counts deployments it manages (name prefix + model + accelerator match)
- Checks
/v2/dedicated-inferences/sizesfor currently enabled region/GPU capacity - Attempts to create additional deployments until
desired_countis met
This gives behavior similar to slug-grabber, but for Dedicated Inference capacity.
| Parameter | Description |
|---|---|
DO_API_TOKEN |
DigitalOcean API token (required) |
region / REGION |
Comma-separated regions to check in order (required) |
model_slug / MODEL_SLUG |
Dedicated Inference model slug (required) |
accelerator_slug / ACCELERATOR_SLUG |
GPU slug to request (required) |
vpc_uuid / VPC_UUID |
VPC UUID for deployment (required) |
desired_count / DESIRED_COUNT |
Global desired managed deployment count (required) |
accelerator_scale / ACCELERATOR_SCALE |
Accelerator scale per deployment (default: 1) |
accelerator_type / ACCELERATOR_TYPE |
Accelerator type (default: prefill_decode) |
enable_public_endpoint / ENABLE_PUBLIC_ENDPOINT |
Enable public endpoint (default: true) |
hugging_face_token / HUGGING_FACE_TOKEN |
Optional Hugging Face token for gated models |
check_interval_seconds / CHECK_INTERVAL_SECONDS |
Polling interval in seconds (default: 30) |
webhook_url / WEBHOOK_URL |
Optional webhook notification URL |
name_prefix / NAME_PREFIX |
Name prefix for managed deployments (default: di-grabber) |
- Dedicated Inference automation guide: https://docs.digitalocean.com/products/inference/how-to/use-dedicated-inference/#create-dedicated-inference-using-automation
- Dedicated Inference API reference: https://docs.digitalocean.com/reference/api/reference/dedicated-inference/