Wanderland

Advaita Service: wisp

wisp is the compute-plane router — the scheduler tier that sits under the echo/img launchers. It classifies a work request against a registered job type, sizes it from foxfire's usage statistics, reserves Kueue quota, and launches the Nextflow driver as a Kubernetes Job gated by its own queue. It runs on Kubernetes (CoreWeave dev, OrbStack local) as a namespace-internal service.

What it does

Why it exists

A launcher turns a UI action into work, but where that work runs — what size, which queue, on-demand or spot, gated by how much quota — is a scheduling decision that needs the fleet's history and the cluster's quota model. wisp is that decision. It reads foxfire's per-process p95 statistics to size a run, maps the caller's immediacy to a worker queue family, and hands the driver Job to Kueue with the resources it reserved. The template library is the whole registration surface: a job type is one entry in config/templates.yml, no router code.

How it works

Deployment (k8s)

Env Context Image stage
local orbstack build → ECR (arm64)
dev useast13-dev build → ECR (amd64)

Cluster prep (separate track)

Two one-shot drones, run before the first deploy — not part of the image pipeline:

Registration — the template library

config/templates.yml is where every job type is declared: the driver image, the workflow + config paths, the ERB-rendered run options, the volume mounts, and the resource class (cold-start defaults, min/max clamps, spot posture, gpu declaration, the process list). Adding a job type is one entry; the router learns everything it knows about a workload from it. The registered set spans the synth setlist (the karaoke stress workloads), img.recontrast_run (the metabolomics pipeline), and echo.fibfizz (the toy).

Configuration

Dependencies

Dependency Use Endpoint / id
foxfire per-process sizing statistics (envelope); receives the plan foxfire.vivarta-echo.svc.cluster.local:9311
Kueue admission + quota for the driver and task queues ClusterQueues / LocalQueues
ECR image registry advaita/wisp
Kubernetes API apply driver Jobs, read Kueue objects via wisp SA
driver images launched as one-shot Jobs advaita/synth-driver, advaita/ortho-driver, advaita/nf-driver

Dependents

Dependent Use
echo-backend proxies /queues, /preview, and /submit (the launcher's wisp-routed path)
puck launches drone sorties that submit waves of work to /submit
reaper records placement for the runs wisp launches; foxfire joins plan + placement

Impact when down

New work cannot be routed or launched through the compute plane — submits fail and the queue view goes stale. Driver Jobs already admitted continue; the reaper and foxfire keep recording them. Blast radius is new launches and the routing view, not in-flight compute.

The code

Open questions