The search bar that rages while it retrieves.
Zero dependencies. No build step. No framework. Attach it to any <input> and
that input becomes a live retrieval surface: results as you type, and a meter
driven by the search itself.
The rage is not decoration — it is a readout of retrieval:
| signal | what drives it |
|---|---|
| meter climbs | your typing speed, while you are still asking |
| meter surges | how many results the corpus actually returned |
| meter goes red | the corpus returned nothing — "nothing. the engine is furious." |
Live on every page of rage.pythai.net — press the magnifier, top right.
Retrieval Augmented Generation is a pattern. RAGE — the Retrieval Augmented Generative Engine — is the engine that runs it, and the most innovative deployment of it is not in this repository or any other single one. It is inside mindX, in the pgvectorscale store.
That deployment is worth stating precisely, because the numbers are measured rather than claimed:
- pgvectorscale 0.9.0 on PostgreSQL, with a StreamingDiskANN index over the cosine space — approximate nearest-neighbour search that stays fast as the corpus grows, which is the operation everything else depends on.
- 48,472 embedded chunks across ~40,000 documents, embedded with bge-m3 at 1024 dimensions through local Ollama — no embedding provider, no per-token bill, and no third party sees the corpus.
- Retrieval that excludes gated material in SQL, not after the fact. Filter afterwards and private chunks still consume slots inside the top-k, silently displacing the public results that should have been returned. Nothing leaks, but the answer quietly gets worse and nothing logs it.
- The numbers and the meanings live in separate databases on one cluster: an append-heavy relational store for prices and time series, pgvectorscale for what those numbers mean. A price wants exactness; a chain wants proximity. (the long version)
A version of the engine also runs the board at
deltaverse.pythai.net/chainmarketcap.html,
where retrieval is the whole product: 2,510 chains reconciled across CoinGecko,
CoinMarketCap, chainid.network and the RPC endpoints themselves, with each
source allowed to disagree in the open rather than being averaged into a single
confident number. Its own documentation is embedded back into the pgvectorscale
store, so the board is both a retrieval surface and part of the corpus.
The ragebar is the smallest possible front door to that idea: retrieval first, generation second. That is what the R and the G in RAGE are for.
gaterage is the ragegate — the way in. The org carries three kinds of repository, and they should not be read as equals:
The engine and its variants — RAGE (the engine itself, GPL-3.0) · deeprage (multi-model MVP, local + API) · deepragetemplate (the template others start from) · DeepSeekRAGE (DeepSeek + streaming) · ragemini2 (Gemini) · RAGEmini
The cognitive corners — aGLM, the
Autonomous General Learning Model, extrapolated from automindx ·
mastermind, strategic orchestration,
directive → plan → execute ·
neuralnet, RAGE integrated with a mini
production transformer · RAGEnet ·
drage, dynamic self-prompting from
agency.txt
The surfaces — rageminibar (modular Streamlit menus) · RAGE-ui · and this repository.
The rest of the org is forks, and they are honest about what they are: study
material. Of 73 repositories, 13 are original and another 17 are forked within
our own orgs (pythaiml, augml, DeltaVML, UIUXt) — so GitHub's fork
badge undercounts the work considerably. The remaining 43 are external.
The clearest map of how this came to be is github.com/professor-codephreak; the narrative is told properly in the articles on rage.pythai.net.
<link rel="stylesheet" href="src/ragebar.css">
<input id="q" class="ragebar-input" type="search" placeholder="search...">
<script src="src/ragebar.js"></script>
<script>Ragebar.attach(document.getElementById('q'));</script>Corpus-agnostic — the WordPress REST search API is only the default:
Ragebar.attach(input, {
endpoint: '/my/search?q=', // ? or & terminated
parse: (json) => json.hits.map(h => ({ title: h.name, url: h.href })),
total: (headers) => headers.get('X-Total-Count'),
minChars: 2, debounce: 260
});Ragebar.attach() returns { input, search, el }, or null if that input was
already attached.
wordpress/ragebar-widget.html is the deployed drop-in: paste it into a
Custom HTML widget in any always-rendered sidebar and it upgrades the
theme's existing header search in place.
Two traps, learned the hard way:
wpautopdestroys<script>in post/page content. Blank lines inside a script become</p><p>— a syntax error — and HTML inside JS strings gets rewritten. Custom HTML widgets are not filtered this way. That is why the library builds every node withcreateElementand never withinnerHTML.POST /wp/v2/widgetsignores thesidebarfield, leaving the widget inwp_inactive_widgets. Assign it withPOST /wp/v2/sidebars/<id>— which blanks the content — then write the content again. Three calls, in that order.
The same meter, pointed at a leaderboard instead of a corpus. It follows MiMo-V2.6-Pro, at the time of writing the top open-weight model on BenchLM.ai (75.5/100, #11 of 208 overall). It also follows two repos on the Hub: XiaomiMiMo/MiMo-V2.6-Pro-RL and a pointer fork, Gregory-L/MiMo-V2.6-Pro-RL, which carries the config, code and tokenizer at a pinned upstream commit, without the ~600 GB of weights.
| signal | what drives it |
|---|---|
| meter width | the BenchLM score out of 100, with its 90% interval shaded behind it |
| card surges | the snapshot moved since this viewer last looked |
| card goes red | the last move was a loss (score down, rank number up), or a watched repo is missing from the Hub |
It comes in two parts, because benchlm.ai publishes its rankings as open JSON but sends no CORS headers, so a browser cannot read them from another origin:
tools/benchwatch.mjs(Node 18+, zero dependencies) readsbenchlm.ai/data/models.jsonwithIf-None-Matchand the Hub API, then writesdata/benchwatch.jsonplus one line per moved field todata/benchwatch-history.jsonl. When nothing moved it writes nothing..github/workflows/benchwatch.ymlruns it every six hours and commits only when something changed.src/ragewatch.jsrenders the snapshot. By default it reads the committed copy fromraw.githubusercontent.com, which serves it with CORS open.
<link rel="stylesheet" href="src/ragebar.css">
<div id="watch"></div>
<script src="src/ragewatch.js"></script>
<script>Ragebar.watch(document.getElementById('watch'), { slug: 'mimo-v2-6-pro' });</script>To follow another model, add it to benchwatch.json. The benchlm value is the
slug from the model's URL on benchlm.ai, and hf lists any repos to track with
it. watch.html is the demo.
The BenchLM data is CC BY-NC 4.0, not Apache-2.0: non-commercial use with the
credit Data from BenchLM.ai and a link. The card prints that credit, and
data/README.md says the same.
- 30fps cap,
requestAnimationFrame, rage decays — the canvas is cheap and idles at nothing. - Stale answers lose. Every search takes a sequence number and aborts the previous request; a slow reply for an old query can never overwrite a fast one.
prefers-reduced-motionremoves the canvas entirely; the bar stays fully functional.- Accessible:
role="status"+aria-live="polite"on the readout, the canvas isaria-hidden, results are real links.
Apache-2.0.