Decision spike creator
Define a decision as questions with fixed options, label some cases, and train a specialist ("spike") for Ettin-17m on your GPU. Ettin-17m is the frozen 10 MB decision model behind the Spiky Ball Decider. The spike is a 0.5 MB adapter (LoRA weights for the encoder plus a small decision head that scores each option) and loads into that page as it is. Nothing leaves the browser; training needs WebGPU and an 11 MB model download.
1. Decision
Prepare a dataset with an AI agent
A spike is only as good as its cases. Copy this prompt into the AI agent you use (Claude, ChatGPT, or a coding agent with your files). It asks about your decision, helps you collect and label cases, and checks the file. Paste what it returns below. If you have drafted questions here, the prompt includes them.
The agent's JSON file:
The demo is 1,800 commands people wrote for a voice assistant ("wake me up at nine on friday"), from Amazon's MASSIVE dataset (CC BY 4.0), with three questions built from its own labels: the area, whether the person wants something done, wants information or is chatting, and whether a date or time is named. No library spike covers spoken commands, so it shows training a decision the library does not know. It still starts from all seven library spikes merged into one: none of them has seen a voice command, and the merge scores 87% of answers right on the 600 test commands after training on all 1,200, against 85% from a fresh adapter (three seeds; no seed did worse). The invoice demo is a library workflow held out from its own spike: it starts from the other three workflow spikes, to show how a related start helps.
Decision as JSON
Typed Decisions shape: {"id", "description", "questions": {"name": {"type": "choice|noul|score", "instructions", "criteria"}}}.
Criteria are {"option": "description"} for choice, an array of level descriptions for score (levels 0, 1, …), and optionally
{"true", "false"} for noul, a statement the model judges true or false.
2. Cases
Add a case
Add many (JSON lines)
One case per line: {"id": "c1", "state": "…", "gold": {"question": "option"}}. A gold value can also be
a distribution, {"option": 0.7, "other": 0.3}. Add "split": "test" to hold a case out.
3. Train
Start from
The spike's starting weights: one library spike, or the mean of several. A mean is cut to rank 8 by SVD, as adapter-library does for its library start. Tick none to start from scratch: a fresh adapter and head on the stock model, which needs more labelled cases (adapter-library: 0.58 against 0.67 for a library start, at 64 cases on an unseen workflow).
What trains
Stop pauses a run, and Resume continues it exactly where it stopped. The run is also saved in this browser after every epoch and every 50 steps. If the page reloads or the GPU is lost, it can resume from there. Closing a laptop's lid still puts it to sleep.
4. Results
5. Try it
6. Export
Two files: a .json with the questions and calibration, and a 0.5 MB .bin of adapter weights.
They load in the Spiky Ball Decider as they are: put both in one of its sets'
spikes/ directories and add the spike to that set's system.json, using the entry shown after download.
Use it on your own page
Download a ready-made page: one HTML file with your spike inside, a text box and the answers. Open it or put it on any web host. Or add the model to a page of your own: host the two spike files next to it and import the runtime, as below. The 11 MB base model and the engine load from this site, which allows other sites to use them. Visitors need a WebGPU browser.
Source and write-up: experiments/decider-lora-creator.