# Magic Jev Ball — ask it anything

A Magic 8 Ball that actually reads the question. One call to Jev, TypeSafe's System One model, returns calibrated probabilities instead of text; the ball answers from them and shows its working.

Page: https://quirkyagents.com/wizard/projects/jevball/play/ · How it is built: https://quirkyagents.com/wizard/projects/jevball/ ([Markdown](https://quirkyagents.com/wizard/projects/jevball/index.md))

## Using the page

Type a yes-or-no question and press **Shake** (or tap the ball). The ball tumbles and shows one of the classic 8-ball answers. Open **What the ball actually said** for the numbers: where the verdict sits on a five-level no-to-yes axis (0 Almost certainly not … 4 Almost certainly yes), how peaked that distribution is (confidence), whether it read as a real question, whether the answer is knowable at all, and how much is at stake for the asker.

## How it decides

One request asks Jev four questions about the same sentence:

- **verdict** (Score, 5 levels): how likely the answer is yes. The ball speaks from the tallest bar, not the rounded mean.
- **stakes** (Score, 3 levels): how much rides on the answer. On a high-stakes extreme verdict the wording steps one level toward the middle ("hedged"); the measured level does not change.
- **is_question** (Noul): below 0.5 the text is not scored and the ball says "Concentrate and ask again".
- **knowable** (Noul): a middle verdict below 0.4 gets "Cannot predict now" or "Better not tell you now".

Jev picks the level; the phrasing within it is chosen in code, seeded on the question, so the same question always gets the same answer.

## API

`POST https://quirkyagents.com/wizard/api/jev` with `Content-Type: application/json`

```json
{ "question": "Will it rain in Mumbai next Tuesday?" }
```

`question` is 1–400 characters. A 200 response:

```json
{
  "answer": "Reply hazy, try again",
  "level": 2,
  "spokenLevel": 2,
  "hedged": false,
  "reason": "verdict",
  "verdict": { "type": "score", "score": 1.99, "confidence": 0.98, "legend": { "0": "Almost certainly not: …", "4": "Almost certainly yes: …" },
               "probabilities": { "0": 0, "1": 0.01, "2": 0.98, "3": 0.01, "4": 0 } },
  "signals": { "isQuestion": 0.98, "knowable": 0.85, "stakes": 0.67 }
}
```

`verdict` is Jev's Score as returned (`legend` names all five levels). `level` is the tallest bar; `spokenLevel` is the level the wording came from, which differs only when `hedged`. `reason` is `verdict`, `unknowable` or `not_a_question`. Errors come back as `{ "error": "…" }`: 400 for an empty, too long or malformed request, 429 once the daily limit is used (20 a visitor, 500 in all), 502 when the model call failed, 503 when the demo is switched off. It is a public demo on a paid key: please don't script it.
