This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady. Quiet Pair finds similar English sentences in a small CSV and puts them into a review queue. It is for the tedious moment when a text column contains the same request written several ways, but deleting a near-match could erase an important difference.
An open sentence model does the searching. The reviewer chooses Same meaning, Different, or Not sure, with undo available. There is no delete button and no automatic merge. If A resembles B and B resembles C, the app does not conclude that A equals C.
The deliberate laziness is avoiding the search through every possible pair. The deliberate slowness is reading before deciding. The output is a decision audit; the original CSV stays intact.
Try Quiet Pair in your browser. Choose Try a synthetic example, then Find similar pairs. The first run downloads the model. Read both sentences, make a decision, and download the audit before closing the tab.
That screenshot captures the most useful result from testing: “I want to cancel my subscription” and “Do not cancel my subscription” ranked highest. A confident-looking similarity score must not become an irreversible action.
Source code, synthetic fixtures and tests, with the original application under the MIT License.
The core is all-MiniLM-L6-v2, an Apache-2.0 open sentence model, running through Transformers.js 3.8.1 and ONNX Runtime Web. A worker loads pinned q8 weights and performs WebAssembly inference. Mean-pooled, normalized embeddings produce cosine scores; a separate review journal records individual decisions.
The model is essential: exact string matching would miss paraphrases. It is also fallible. Scores rank candidates rather than certify duplicates, and the similarity floor only filters what appears in the queue. Lowering it reveals more pairs without silently judging the rest.
The exported audit includes original texts, row numbers, verdicts, scores, a model revision and a source-text fingerprint. Formula-like cells receive a protective prefix for spreadsheet export. English matching, 150 rows and short cells keep the scope small; even these cells can exceed the model's token limit.
Six Node tests passed for parsing, ranking, independent decisions, undo, export and source preservation. An automated UI check in the Codex in-app browser on Windows also ran the real model and exercised all decisions, undo and a four-row audit download. Twelve synthetic rows produced 66 pairs and four candidates at a 0.72 floor. The UI reported 1.68 seconds initialization and 0.25 seconds for embeddings in that single run. Cache state and hardware were not measured, so this is no cold-load benchmark, human user study or accuracy evaluation.
Open weights let the application run inference in the user's browser without an inference account, API key or per-request inference bill. A pinned model revision and readable scoring code also make the source of each suggestion inspectable. The audit records which model produced it, rather than hiding that choice behind a changing service.
The application has no CSV upload endpoint. It does download model and runtime files from Hugging Face and jsDelivr, whose suppliers receive normal connection metadata. Those dependencies remain trusted software, and initial network access is required. Offline re has not been verified; synthetic or non-sensitive input is appropriate while evaluating this preview.
The useful saving is attention spent finding candidates. How much time it saves in real work is still unmeasured. For now, the design goal is concrete: let an open model do the repetitive search, while keeping the final decision visible and reversible.