Lumbridge Compute
ci / rust (push) Successful in 2m27s

Governed compute for unified-memory AI hardware — machines where CPU and GPU
share one pool and there is no separate VRAM allocation to bounce off.
Over-commit that pool and the box thrashes and wedges, SSH and ping included,
before the OOM killer gets a turn.

Compute does not run inference. It supervises the servers that do:

- Admission control against two ceilings — a declared budget, and what the
  machine actually has free. The refusal is the feature.
- A 1 Hz watchdog on MemAvailable that stops the newest model before thrash,
  and defers to a Scene transition rather than racing it.
- Scenes: named sets of models activated as one transactional unit, with
  pre-flight validation and rollback to the previously active Scene on
  failure. Scenes reference model ids, never weight paths or commands, so a
  Scene obtained from elsewhere cannot introduce code.
- Process ownership bound to (boot_id, pid, start_time_ticks, pgid == pid),
  so a reused PID can never be group-killed.
- A protocol-transparent TCP gateway, so clients keep one address while model
  runtimes move behind it.
- An MCP server, so agents drive the node as tools.
- A read-only HTTP API for dashboards: loopback by default, CORS off unless an
  origin is named, and it never mutates.

One binary, six direct dependencies, no async runtime outside the MCP and API
surfaces. Apache-2.0.

Generated from the internal monorepo by scripts/publish-compute.sh, which
refuses to publish a tree it cannot prove clean.
This commit is contained in:
Karti Tripathi
2026-08-03 20:39:56 -07:00
commit 2584ea908e
40 changed files with 5947 additions and 0 deletions
+34
View File
@@ -0,0 +1,34 @@
apiVersion: lumbridge/v1
version: 1
# GPU-free demo registry: each "model" is just a tiny HTTP server so you can watch
# Lumbridge Compute activates scenes, swap models, and run the watchdog on any Linux box.
# Run from the repo root: lumbridge-compute --root examples/demo scene activate two
models:
alpha:
name: "Demo Alpha (http.server)"
footprint_gb: 1
health: "http://127.0.0.1:9101/"
serve:
kind: exec
port: 9101
command: ["python3", "-m", "http.server", "9101", "--bind", "127.0.0.1"]
beta:
name: "Demo Beta (http.server)"
footprint_gb: 1
health: "http://127.0.0.1:9102/"
serve:
kind: exec
port: 9102
command: ["python3", "-m", "http.server", "9102", "--bind", "127.0.0.1"]
gamma:
name: "Demo Gamma (http.server)"
footprint_gb: 1
health: "http://127.0.0.1:9103/"
serve:
kind: exec
port: 9103
command: ["python3", "-m", "http.server", "9103", "--bind", "127.0.0.1"]
+12
View File
@@ -0,0 +1,12 @@
apiVersion: lumbridge/v1
kind: Scene
metadata:
name: one
version: 1
description: "Demo scene one: alpha + beta."
models:
- alpha
- beta
activation:
order: footprint-asc
wait_healthy: true
+12
View File
@@ -0,0 +1,12 @@
apiVersion: lumbridge/v1
kind: Scene
metadata:
name: two
version: 1
description: "Demo scene two: beta + gamma (keeps beta, swaps alpha->gamma)."
models:
- beta
- gamma
activation:
order: footprint-asc
wait_healthy: true