lmjtfy.git / packages / ask / README.md
1# Chapter 7: ask, the eight questions Jev gets about every question
2
3Remember the trick from the prologue: Jev cannot write, it can only judge
4questions whose answers are already written down. So before anyone writes
5anything, this site asks Jev *about* the question you typed. Eight
6questions, all in one request, all with their answers spelled out. These are
7they, word for word as Jev receives them, with your input as the state:
8
9| Fact | Type | Asked |
10| --- | --- | --- |
11| `answerable` | Noul | "Is the input a question you can answer with your types?" Yes: a yes-or-no question, a question with a best answer among options, or a question of degree. No: a greeting, a statement, a command, or a request to write, explain, summarise or do something. |
12| `kind` | Choice | "What kind of question is the input?" A yes-or-no, a pick, a how-much, or a how-likely. Jev's probability for each becomes four facts, one per reading. |
13| `several` | Noul | "Does the input ask more than one separate question?" |
14| `yes` | Noul | "Answer the question in the input." Yes means the answer is yes. |
15| `degree` | Score | "Answer the question in the input as a degree", from "Not at all" through "Slightly", "Moderately" and "Very" to "Extremely". |
16| `scale` | Noul | "Would the input be answered badly on a general scale from 'Not at all' to 'Extremely'?" Yes when what it asks about has its own units, ranges or named levels. |
17| `chance` | Noul | "Is the thing the input asks the chances of so?" Its probability is the answer to a how-likely question. |
18| `fit` | Noul | "Is the input fit to show to strangers on a public page?" No for a slur, harassment, a threat, sexual content, or a private person's name or details. |
19
20Look at what that buys. If you asked a yes-or-no question, `yes` already
21*is* the answer: Jev answered it while it was working out what kind of
22question it was. Same for a how-much on a general scale (`degree`) and for a
23how-likely (`chance`). The LLM is never called for those. Chapter 6's rules
24decide which of these answers to show.
25
26> **Aside.** Why does `answerable` say "your types"? Because Jev answers in
27> exactly three shapes: a Noul (a probability of yes), a Choice (a
28> probability for each option), a Score (a probability for each level).
29> "Can you answer this with your types" is the most honest way to ask
30> "is this a question at all?"
31
32> **Try it.** Start typing a question at <https://lmjtfy.fun>
33> and stop for a moment. The line under the box is these eight questions,
34> asked as you type ("Jev can judge this · a yes or no"). By the time you
35> press Enter, the answer is usually already in.
36
37The questions' wording is behaviour: it decides which rule fires. It is
38measured by `lmjtfy-eval facts` (chapter 14) against 25 inputs: 25 of 25 on
392026-10-02, at about 920 tokens and $0.00004 a request.
40
41## The record each call leaves
42
43The page shows every call, with the exact bytes that crossed the wire, so
44this package also keeps a careful record of each one:
45
46- `Wanted` says what to ask about an input: the facts the rules want, or the
47  questions the LLM wrote (`llm::Draft`). Either way it is one request,
48  however many questions.
49- `wanted` builds that request as a `Prepared`, which exposes the exact
50  request body (so the page can show it before the response exists), its
51  questions in order, and the call's worst-case cost (so a budget can hold
52  it).
53- `learned` turns the answer to a fact's question into the fact's value.
54  The four readings share one question (`question_id`); `readings` is the
55  kinds Jev's answer supports: the likeliest, and the runner-up when it has
56  at least `ALSO` (30%).
57- `check` says whether Jev's protocol takes a question the LLM wrote.
58- `send` runs a request on a `jev_client::Client` and returns an `Outcome`:
59  the typed answers (`Judged`, one per question), the raw response body,
60  attempts, usage, the request id and the time taken, or the error and what
61  to count it as.
62- `read` gives the same `Outcome` from a response body kept from an earlier
63  `send` of the same request (chapter 9). It checks the body against the
64  questions exactly as `send` does, and marks the outcome `Sent::Before`.
65- `clean`, `is_yes`, `is_sure`, `likelihood` and `DEGREES` are the small
66  rules the page prints by: what counts as yes (0.5), what counts as sure
67  (0.7, below which "Yes." becomes "Yes?"), and the words for a probability.
68
69## In this folder
70
71| Path | What |
72| --- | --- |
73| [src/](src/) | The questions, the request, and the record. |
74| [Cargo.toml](Cargo.toml) | The crate: `jev-protocol` and `jev-client` from jevcrates, and `rules` and `llm`. |
75
76← Previous: [Chapter 6½, rules/src/](../rules/src/) · Up: [packages](../) · Next: [Chapter 7½, ask/src/](src/) →