Clutch2 / README.md
Aluode's picture
Upload 4 files
410424a verified
|
Raw
History Blame Contribute Delete
4.14 kB
---
title: The Clutch
emoji: πŸ”Œ
colorFrom: green
colorTo: gray
sdk: gradio
sdk_version: 6.19.0
app_file: app.py
pinned: false
license: mit
short_description: Spend expensive compute only when reality drifts.
---
# πŸ”Œ The Clutch β€” *spend expensive compute only when reality drifts*
A **substrate-agnostic dual-process controller**, distilled from Antti Luode's Loom
Navigator to its one reusable idea, then given a live demo you can *watch*.
> Run a **cheap cached policy** by default. Only pay for an **expensive planner** when a
> *surprise* signal trips a **gate**. When things go calm, **latch** the fresh plan back
> into the cache.
`clutch.py` is ~120 lines, has **no dependencies**, and makes **no assumption about what
the substrates are**. You hand it three callbacks β€” a cheap cached step, an expensive
planner, and a scalar error signal β€” and pick a gate. That is the whole interface.
## What the Space shows
0. **Tune it on YOUR data** β€” the tool, not the demo. Paste or upload any 1-D time
series (latency metric, sensor stream, price feed). The Space runs the real
closed-loop clutch on it, sweeps ~80 gate configs, plots the accuracy-vs-compute
Pareto frontier, and returns a **copy-paste `Clutch(...)` config tuned to your data**
plus a dollar-savings estimate. If gating doesn't pay on your series, it says so.
1. **Watch it navigate** β€” an agent patrols A↔B on a 60Γ—60 grid while walls with a gap
drop at scripted times, breaking its cached route. Every maze is *guaranteed solvable*
(schedules that would disconnect A–B are rejected), so the outcome reflects the gate,
not luck. You see, frame by frame, when the gate keeps the cheap habit (green) and when
it trips and pays for a fresh plan (red), with the compute counter running against
replan-every-step.
2. **Same clutch, different world** β€” the *identical* `Clutch` class forecasts a streaming
signal with abrupt regime changes, refitting a model **only when prediction error trips
the gate**. This is concept-drift-gated retraining; only the three callbacks changed.
3. **The honest benchmark** β€” reproduce the multi-seed measurement in-browser. Compute is
counted honestly (BFS cells expanded / training samples fit).
4. **What this is / where it's valuable** β€” the LLM-agent-loop framing (the expensive call
is a token-billed re-plan) with drop-in code, plus the honest negative result.
## Headline numbers (reproducible in tab 3)
Grid navigation, 16 seeds, patrol Γ—3, no sensor noise:
| strategy | success | BFS expanded | plan calls | vs replan-all |
|---|---:|---:|---:|---:|
| ALWAYS_COGNITIVE | 94% | 227,309 | 250.8 | 100.0% |
| ALWAYS_HABITUAL | 0% | 2,221 | 1.0 | brittle |
| **CLUTCH (leaky integrator)** | **100%** | **8,100** | **3.4** | **3.6%** |
The clutch hits the goal *more reliably than replanning every step* (100% vs 94% β€”
constant replanning occasionally lets a wall seal the agent mid-corridor) while spending
**~1/28th the compute**.
## The honest negative result
The **accelerometer / jerk gate** (2nd-derivative of error, the Park–Cohen framing) is
*not* a free lunch. Under sensor noise it fires ~1.7Γ— more than the leaky integrator and
burns ~50% more compute for the same success; on the drift task it *under*-fires and
fails. Across both substrates the plain **leaky integrator is the better engine here.**
The derivative gate's edge would show on tasks needing *fast* reaction to abrupt change β€”
which neither of these stresses. Stated, not hidden.
## Files
- `clutch.py` β€” the controller + gates. Drop-in, zero deps.
- `nav.py` β€” grid-navigation substrate (frame capture + benchmark).
- `drift.py` β€” concept-drift substrate driving the *same* `Clutch`.
- `viz.py` β€” matplotlib rendering (animation + plots).
- `tuner.py` β€” the bring-your-own-data gate tuner (parse β†’ sweep β†’ Pareto β†’ config).
- `app.py` β€” the Gradio Space.
- `benchmark_orig.py` β€” the original headless benchmark. Run: `python3 benchmark_orig.py`.
Built on `clutch.py` / `benchmark.py` by Antti Luode (PerceptionLab). *Do not hype. Do
not lie. Just show.*