AI Tutors and Learning Tools
Trace mastery, ground every card in a source, plan paths and materials, and suggest words from your own corpus.
- Concepts and terms
- Tasks and commands
- Annotated code
- Diagrams
- Comparisons
- Defaults and numbers
- Troubleshooting
- Questions and tips
What each project builds#
| Factor | Study coach | Path finder | Autocomplete pad | Materials planner |
|---|---|---|---|---|
| Builds | Practice page with review dates | Feasible learning path | Local writing pad | Packing list and shortages |
| Runtime | Node.js 22.18 | Python 3.10+ | Node 22.18 | Python 3.10+ |
| Input | Deck JSON and attempt events | Resources, goals, budget | Corpus of id and text | Participants, materials, inventory |
| Output | index.html, progress.json | learning-map.html, path.json | report.html, vocabulary-model.json | packing-list.csv, shortages.json |
| Review loop | Download attempts JSON | --decisions decisions.json | Download vocabulary-model.json | --decisions decisions.json |
| Limit | Exact answer match only | Self-reported progress | One next token, two of context | One concurrent session |
From source-grounded-study-coach/README.md, community-learning-path-finder/README.md, vocabulary-autocomplete-pad/README.md, workshop-materials-planner/README.md, solution/cli.ts, solution/main.ts
Run and grade#
| Command | What it does |
|---|---|
python3 scripts/ | Makes a workspace. The first stage fails |
python3 scripts/ | Grades one stage |
python3 scripts/ | Checks the reference solution |
node --experimental-strip-types main.ts --deck ./ | Builds the practice page and schedule |
python3 cli.py samples/ | Runs path finder or materials planner |
node cli.ts sample.json output | Trains the pad and writes output/report.html |
python main.py | Runs the simulated tutor efficacy study |
npm run serve | Tutor web app on :8090 |
From source-grounded-study-coach/README.md, community-learning-path-finder/README.md, vocabulary-autocomplete-pad/README.md, workshop-materials-planner/README.md, 19.17 code/main.py, 19.17 code/ts/README.md
Defaults and numbers#
| Setting | Default | Note |
|---|---|---|
p_init | 0.2 | Prior knowledge |
p_learn | 0.12 | Learn rate per practice |
p_slip, p_guess | 0.10 | Guess is 0.15 |
master_threshold | 0.85 | Mastered concepts are skipped |
| Catalog size | 18 | Exact planner maximum |
suggest limit | 5 | Allowed range 0..50 |
Planner compare | [8, 12] | Participant counts to compare |
Study n_turns | 60 | 10 learners in each arm |
From 19.17 code/main.py, community-learning-path-finder/API.md, solution/main.ts, solution/cli.py
Errors and fixes#
| Symptom | Cause | Fix |
|---|---|---|
| "Canonical answer must occur in the evidence quote" | Offsets miss the answer | Fix start and end in UTF-16 units |
| "Conflicting duplicate attempt ID" | Same id, other content | Give each attempt a new id |
| "Proposal lacks verbatim answer evidence" | Model quote is not in the source | Reject it. Keep the deck unchanged |
| "prerequisite cycle" | Resources need each other | Remove one prerequisite edge |
| "stale progress" | Input changed after export | Rerun, then edit the new decisions |
| "complete prerequisites first" | Progress skips a step | Mark the prerequisites done first |
| "inconsistent conversion cycle" | Two unit paths disagree | Fix the conversion factors |
| "Unsupported model schema" | schemaVersion is not 1 | Load a model with schema version 1 |
From solution/main.ts, solution/main.py, solution/main.ts, solution/main.py
One tutor turn#
BKT update#
p = BKTParams()p_init, p_learn, p_slip, p_guessif correct: num = mastery * (1 - p.p_slip) denom = num + (1 - mastery) * p.p_guesselse: num = mastery * p.p_slip denom = num + (1 - mastery) * (1 - p.p_guess)posterior = num / max(denom, 1e-6)return posterior + (1 - posterior) * p.p_learnlearn transitionFrom 19.17 code/main.py
Study coach loop#
From solution/main.ts, source-grounded-study-coach/README.md
Project functions#
| Task | Code |
|---|---|
| Grade one typed answer | gradeAnswer(deck, |
| List due cards | dueCards(progress, |
| Order prerequisites | path_for(index, |
| Rank paths in a budget | rank_paths(index, |
| Suggest a next word | suggest(model: Model, |
| Load a saved model | importModel(value: unknown) |
| Scale materials | scale(model, |
| Find shortages | shortages(model, |
From solution/main.ts, community-learning-path-finder/API.md, vocabulary-autocomplete-pad/README.md, workshop-materials-planner/API.md
Rules in code#
- Answer match
- NFKC, lower case, trim, drop end punctuation. Then exact match.
- Box
- correct adds 1 up to 5. Wrong resets to 0.
- Interval
2 ** (state.box - 1)days when correct. 1 day when wrong.- Path rank
- most goals covered, then fewest minutes, then IDs.
- Suggestion score
order * 1000000 + count. A longer history wins.- Consumables
quantity*participants.- Shared equipment
quantity*ceil(participants/share).- Unknown stock
- unconvertible inventory leaves shortage unknown.
From solution/main.ts, community-learning-path-finder/API.md, solution/main.ts, workshop-materials-planner/API.md
Abbreviations#
- BKT
- Bayesian knowledge tracing. Mastery probability per concept.
- FSRS
- Free Spaced Repetition Scheduler. Better than SM-2.
- DAG
- concept graph with prerequisite edges.
- COPPA
- US law that restricts data from children under 13.
- OER
- open content attached to each curriculum node.
Questions#
- What does the tutor do when asked for the answer?
- It asks a leading question.
- What proves the tutor works?
- A pre/post test delta with 10 learners over two weeks.
- Does the study coach judge essays?
- No. It uses authored questions and exact matches.
- Does a model card go into the deck?
- No. It goes to card-proposal.json for review.
- Does the planner guess glue volume?
- No. It never infers density or package size.
From Lesson 19.17, source-grounded-study-coach/README.md, workshop-materials-planner/API.md
Tips#
- Build a curriculum graph of 50-150 concept nodes.
- Compare with a non-adaptive baseline on the same content.
- Auto-delete memory after 1 year. Scope it by learner ID.
- Pass the review date from the page to
--date. - Keep a second set of examples for evaluation.
- Reloading the practice page before download discards new attempts.
From Lesson 19.17, source-grounded-study-coach/README.md, community-learning-path-finder/README.md