Clutch2 / README.md
Aluode's picture
Upload 4 files
410424a verified
|
Raw
History Blame Contribute Delete
4.14 kB
metadata
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

  1. 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.
  2. 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.
  3. 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.
  4. The honest benchmark β€” reproduce the multi-seed measurement in-browser. Compute is counted honestly (BFS cells expanded / training samples fit).
  5. 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.