All demosJudge Sheets
Judge Sheets
A spreadsheet where typing a column header — "Urgency", "Refund risk?" — reads what you meant and fills 300 rows with judgments in a few calls.
/classify/yes-no/rate
How it works
The original Jev experiment asked one question per cell: 300 reviews meant 300 requests, each one carrying every question for that row. Here the batching is turned around. One request carries one question and up to 32 texts, so a 300-row column is 10 calls.
Reading the header
120 ms after you stop typing a header, one /classify call goes out with the header on its own first
line plus three sample rows from the text column next to it, and 14 described labels: Sentiment, Urgency,
Topic, Intent, Buying intent, Tone, Priority, Star rating, Defect?, Recommends?, Refund risk?, Spam?, Yes / no,
Low / high. The winning label picks the schema; its probability is the percentage in the chip. The next
keystroke aborts the call in flight. A header that already names a schema — Tone, Priority, or an
alias like Stars or Severity — skips the call entirely and the chip says “exact match”: a
classifier asked to choose between fourteen one-line descriptions used to hand Tone to Spam? at
47%, and a wrong schema at 47% reads exactly like a right one.
Filling the column
Pressing Enter writes =JUDGE, =PICK or =RATE into every data row. The engine
recalculates, collects the judgments it is missing, groups them by question and slices each group into chunks of
32 texts. Each chunk is one call:
- Yes / no schemas (Defect?, Recommends?, Refund risk?, Spam?) go to
/yes-noas{texts, statement, when_true, when_false}. Defect? sends the statement “The product itself is broken, damaged or does not work.” with the hints “The writer names a part that broke, cracked, leaks, stopped working, shuts off or arrived damaged.” and “The writer names no broken part: the complaint is about delivery, price, support, colour or size.” Naming the product in the statement and the writer in both hints took this from 46 of 64 fixture rows to 59: “reports a defect” alone scored a ten-day-late delivery as Yes at 99%. Spam? asks the same question by direction — “The sender is selling a service to us, rather than asking about our product.” — which separates a cold backlink pitch from a real price question, 64 of 64. A free-form header becomes a statement too: “Mentions a competitor?” is sent as “The text mentions a competitor.”, and the card lets you edit that statement before you keep the column. - Category schemas (Topic, Intent, Tone) go to
/classifyas{texts, labels}with a description per label — Topic sendsshippingas “delivery speed, tracking, packaging or damage in transit”,qualityas “build quality, materials, durability or defects”, and so on throughprice,supportandother. - Ordinal schemas (Sentiment, Urgency, Buying intent, Priority, Star rating, Low / high) go to
/rateas{texts, scale}, low to high. Sentiment sends “very negative, furious or telling others to avoid it” → “negative, disappointed or would not buy again” → “neutral, mixed or indifferent” → “positive, happy and would recommend” → “very positive, delighted and enthusiastic”. The returnedscoreis the expected level, 0 to 4, which is the number the summary block averages and counts against.
The header call is a single text, so its model time is one judgment: about 30 ms. A column call carries 32 texts,
and the x-inference-ms it reports is the model time for all of them together — a few hundred
milliseconds to a few seconds per call, which is why 300 rows land in well under ten seconds.
Budget
Every visitor shares one key, so the page fetches nothing until you press Run, a sheet only queues its judgments once you open it (Reviews is 300 judgments and 10 calls; opening Leads adds 150 more), the column you just asked for goes to the front of that queue, and a run stops by itself after 14 calls or 60 seconds. Calls are paced at two a second page-wide. Cells that come back from cache cost nothing: re-reading the same header with another schema you already ran is free.
Ported from the judge-sheets Jev experiment. Every request here is live; the shared demo key allows about 2 requests per second across all visitors.