{ "id": "job_murepie2_9d791321", "kind": "demo", "chatId": "chat_munfo08r_8172fd8a", "toolCallId": "call_87f79e758f8145169a8b5550", "status": "done", "activity": "delivered", "createdAt": "2026-10-02T20:19:31.802Z", "updatedAt": "2026-10-02T20:35:31.428Z", "usage": { "model": "openrouter:deepseek/deepseek-v4.1-flash", "inputTokens": 16320, "outputTokens": 14818, "cacheReadTokens": 47104, "cacheWriteTokens": 0, "reasoningTokens": 6051, "steps": 5, "lastStep": { "inputTokens": 325, "outputTokens": 582, "cacheReadTokens": 15744, "cacheWriteTokens": 0, "reasoningTokens": 203 } }, "result": { "title": "BKT belief tracker", "html": "\n\n\n\n\nBayesian Knowledge Tracing — Belief Tracker\n\n\n\n
\n

Bayesian Knowledge Tracing — Belief Tracker

\n

One skill with a hidden state: the student either knows it (1) or doesn't (0). We only see answers, so we track a belief p = P(knows). Each attempt updates it in two separate phases: PREDICT (learning may happen) then CORRECT (the observed answer tells us something).

\n\n
\n \n
\n
\n

Parameters

\n\n
\n
Prior P(knows at start)0.300
\n \n
Where the belief begins. Changing it restarts the sequence.
\n
\n\n
\n
Learn rate T0.100
\n \n
P(0 → 1) between attempts: chance of picking up the skill.
\n
\n\n
\n
Slip s0.100
\n \n
P(wrong | knows).
\n
\n\n
\n
Guess g0.200
\n \n
P(correct | doesn't know).
\n
\n
\n\n
\n

Observed response

\n
\n \n \n \n
\n
Each press runs one attempt: PREDICT first, then CORRECT.
\n
\n
\n\n \n
\n
\n

Current belief

\n
\n
P(knows) =0.300
\n
phase: idle
\n
\n
\n
\n
0.00.51.0
\n
\n
Ready — press Correct or Incorrect to run attempt #1.
\n
\n\n
\n

The two updates

\n
\n
\n
1PREDICT— allow learning
\n
p̄ = p + T·(1 − p)
\n
—
\n
\n
→
\n
\n
2CORRECT— use the response
\n
p′ = (1−s)·p̄ / [ (1−s)·p̄ + g·(1−p̄) ]
\n
—
\n
\n
\n
\n\n
\n

Belief over attempts

\n \n
\n belief p after each attempt\n p̄ straight after PREDICT\n filled dot = P(knows)   C/W = observed response\n
\n
\n\n
\n

Attempt log (most recent first)

\n \n \n \n \n \n
#Responsep (before)p̄ (predict)p′ (after)
No attempts yet.
\n
\n
\n
\n
\n\n\n\n\n", "tested": true, "notes": "The demo is built and verified — all three headless runs passed with no console errors, and the probe checks confirm the arithmetic matches Bayes' rule exactly (e.g. p=0.300 → p̄=0.370 → 0.725 on \"Correct\", and 0.068 on \"Incorrect\" with the defaults).\n\n**Notes for the teacher**\n\n- **What it shows:** a single-skill BKT belief tracker — one big P(knows) number (3 decimals) plus a filled bar, a two-panel \"PREDICT → CORRECT\" strip with live formulas/numerator/denominator, a belief sparkline over attempts (dashed = p̄ after predict, solid = p after correct, each attempt marked C or W), and a short log of the last six attempts (response, p, p̄, p′).\n- **Controls:** four sliders — Prior (0–1, default 0.30), Learn rate T (0–0.6, default 0.10), Slip s (0–0.5, default 0.10), Guess g (0–0.5, default 0.20) — plus **Correct**, **Incorrect**, and **Reset**. Each answer press animates the two phases in sequence with the active panel highlighted and the status line narrating which operation is running, so the two updates are visibly separate.\n- **Try this:** press Incorrect three times and watch belief crater toward 0 (each subsequent wrong answer barely dents it once the denominator is dominated by the leak), then press Correct twice to see recovery; set Slip = 0 and Guess = 0 to make the evidence \"hard\"; or set T = 0 to isolate pure Bayesian correction. Note that moving the Prior slider intentionally restarts the whole sequence." } }