learngraph 0.4.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/dist/cjs/api/routes/analytics.js +288 -0
  2. package/dist/cjs/api/routes/analytics.js.map +1 -0
  3. package/dist/cjs/api/routes/assessments.js +269 -0
  4. package/dist/cjs/api/routes/assessments.js.map +1 -0
  5. package/dist/cjs/api/routes/curriculum.js +345 -0
  6. package/dist/cjs/api/routes/curriculum.js.map +1 -0
  7. package/dist/cjs/api/routes/edges.js +162 -0
  8. package/dist/cjs/api/routes/edges.js.map +1 -0
  9. package/dist/cjs/api/routes/explore.js +224 -0
  10. package/dist/cjs/api/routes/explore.js.map +1 -0
  11. package/dist/cjs/api/routes/learners.js +324 -0
  12. package/dist/cjs/api/routes/learners.js.map +1 -0
  13. package/dist/cjs/api/routes/me.js +404 -0
  14. package/dist/cjs/api/routes/me.js.map +1 -0
  15. package/dist/cjs/api/routes/skills.js +319 -0
  16. package/dist/cjs/api/routes/skills.js.map +1 -0
  17. package/dist/cjs/api/server.js +185 -0
  18. package/dist/cjs/api/server.js.map +1 -0
  19. package/dist/cjs/api/types.js +10 -0
  20. package/dist/cjs/api/types.js.map +1 -0
  21. package/dist/cjs/assessment/adaptive.js +390 -0
  22. package/dist/cjs/assessment/adaptive.js.map +1 -0
  23. package/dist/cjs/assessment/bkt.js +362 -0
  24. package/dist/cjs/assessment/bkt.js.map +1 -0
  25. package/dist/cjs/assessment/index.js +54 -0
  26. package/dist/cjs/assessment/index.js.map +1 -0
  27. package/dist/cjs/assessment/irt.js +420 -0
  28. package/dist/cjs/assessment/irt.js.map +1 -0
  29. package/dist/cjs/assessment/mastery-engine.js +411 -0
  30. package/dist/cjs/assessment/mastery-engine.js.map +1 -0
  31. package/dist/cjs/components/LearningPathView.js +320 -0
  32. package/dist/cjs/components/LearningPathView.js.map +1 -0
  33. package/dist/cjs/components/ProgressDashboard.js +308 -0
  34. package/dist/cjs/components/ProgressDashboard.js.map +1 -0
  35. package/dist/cjs/components/SkillCard.js +264 -0
  36. package/dist/cjs/components/SkillCard.js.map +1 -0
  37. package/dist/cjs/components/SkillExplorer.js +401 -0
  38. package/dist/cjs/components/SkillExplorer.js.map +1 -0
  39. package/dist/cjs/components/SkillGraph.js +435 -0
  40. package/dist/cjs/components/SkillGraph.js.map +1 -0
  41. package/dist/cjs/components/hooks.js +510 -0
  42. package/dist/cjs/components/hooks.js.map +1 -0
  43. package/dist/cjs/components/index.js +77 -0
  44. package/dist/cjs/components/index.js.map +1 -0
  45. package/dist/cjs/components/types.js +34 -0
  46. package/dist/cjs/components/types.js.map +1 -0
  47. package/dist/cjs/index.js +36 -2
  48. package/dist/cjs/index.js.map +1 -1
  49. package/dist/cjs/llm/adapters/anthropic.js +91 -3
  50. package/dist/cjs/llm/adapters/anthropic.js.map +1 -1
  51. package/dist/cjs/llm/adapters/gemini.js +101 -8
  52. package/dist/cjs/llm/adapters/gemini.js.map +1 -1
  53. package/dist/cjs/llm/adapters/index.js +42 -1
  54. package/dist/cjs/llm/adapters/index.js.map +1 -1
  55. package/dist/cjs/llm/adapters/ollama.js +120 -3
  56. package/dist/cjs/llm/adapters/ollama.js.map +1 -1
  57. package/dist/cjs/llm/adapters/openai.js +108 -2
  58. package/dist/cjs/llm/adapters/openai.js.map +1 -1
  59. package/dist/cjs/mcp/cli.js +302 -0
  60. package/dist/cjs/mcp/cli.js.map +1 -0
  61. package/dist/cjs/mcp/index.js +79 -0
  62. package/dist/cjs/mcp/index.js.map +1 -0
  63. package/dist/cjs/mcp/prompts.js +425 -0
  64. package/dist/cjs/mcp/prompts.js.map +1 -0
  65. package/dist/cjs/mcp/resources.js +371 -0
  66. package/dist/cjs/mcp/resources.js.map +1 -0
  67. package/dist/cjs/mcp/server.js +410 -0
  68. package/dist/cjs/mcp/server.js.map +1 -0
  69. package/dist/cjs/mcp/tools.js +612 -0
  70. package/dist/cjs/mcp/tools.js.map +1 -0
  71. package/dist/cjs/mcp/types.js +10 -0
  72. package/dist/cjs/mcp/types.js.map +1 -0
  73. package/dist/cjs/query/index.js +23 -4
  74. package/dist/cjs/query/index.js.map +1 -1
  75. package/dist/cjs/query/path.js +313 -0
  76. package/dist/cjs/query/path.js.map +1 -0
  77. package/dist/cjs/query/spaced-repetition.js +298 -0
  78. package/dist/cjs/query/spaced-repetition.js.map +1 -0
  79. package/dist/cjs/query/zpd.js +216 -0
  80. package/dist/cjs/query/zpd.js.map +1 -0
  81. package/dist/cjs/types/assessment.js +46 -0
  82. package/dist/cjs/types/assessment.js.map +1 -0
  83. package/dist/cjs/types/bloom.js +12 -1
  84. package/dist/cjs/types/bloom.js.map +1 -1
  85. package/dist/cjs/types/index.js +7 -1
  86. package/dist/cjs/types/index.js.map +1 -1
  87. package/dist/esm/api/routes/analytics.js +285 -0
  88. package/dist/esm/api/routes/analytics.js.map +1 -0
  89. package/dist/esm/api/routes/assessments.js +266 -0
  90. package/dist/esm/api/routes/assessments.js.map +1 -0
  91. package/dist/esm/api/routes/curriculum.js +342 -0
  92. package/dist/esm/api/routes/curriculum.js.map +1 -0
  93. package/dist/esm/api/routes/edges.js +159 -0
  94. package/dist/esm/api/routes/edges.js.map +1 -0
  95. package/dist/esm/api/routes/explore.js +221 -0
  96. package/dist/esm/api/routes/explore.js.map +1 -0
  97. package/dist/esm/api/routes/learners.js +321 -0
  98. package/dist/esm/api/routes/learners.js.map +1 -0
  99. package/dist/esm/api/routes/me.js +401 -0
  100. package/dist/esm/api/routes/me.js.map +1 -0
  101. package/dist/esm/api/routes/skills.js +316 -0
  102. package/dist/esm/api/routes/skills.js.map +1 -0
  103. package/dist/esm/api/server.js +179 -0
  104. package/dist/esm/api/server.js.map +1 -0
  105. package/dist/esm/api/types.js +9 -0
  106. package/dist/esm/api/types.js.map +1 -0
  107. package/dist/esm/assessment/adaptive.js +384 -0
  108. package/dist/esm/assessment/adaptive.js.map +1 -0
  109. package/dist/esm/assessment/bkt.js +354 -0
  110. package/dist/esm/assessment/bkt.js.map +1 -0
  111. package/dist/esm/assessment/index.js +21 -0
  112. package/dist/esm/assessment/index.js.map +1 -0
  113. package/dist/esm/assessment/irt.js +406 -0
  114. package/dist/esm/assessment/irt.js.map +1 -0
  115. package/dist/esm/assessment/mastery-engine.js +406 -0
  116. package/dist/esm/assessment/mastery-engine.js.map +1 -0
  117. package/dist/esm/components/LearningPathView.js +316 -0
  118. package/dist/esm/components/LearningPathView.js.map +1 -0
  119. package/dist/esm/components/ProgressDashboard.js +304 -0
  120. package/dist/esm/components/ProgressDashboard.js.map +1 -0
  121. package/dist/esm/components/SkillCard.js +260 -0
  122. package/dist/esm/components/SkillCard.js.map +1 -0
  123. package/dist/esm/components/SkillExplorer.js +397 -0
  124. package/dist/esm/components/SkillExplorer.js.map +1 -0
  125. package/dist/esm/components/SkillGraph.js +398 -0
  126. package/dist/esm/components/SkillGraph.js.map +1 -0
  127. package/dist/esm/components/hooks.js +502 -0
  128. package/dist/esm/components/hooks.js.map +1 -0
  129. package/dist/esm/components/index.js +61 -0
  130. package/dist/esm/components/index.js.map +1 -0
  131. package/dist/esm/components/types.js +31 -0
  132. package/dist/esm/components/types.js.map +1 -0
  133. package/dist/esm/index.js +13 -1
  134. package/dist/esm/index.js.map +1 -1
  135. package/dist/esm/llm/adapters/anthropic.js +88 -2
  136. package/dist/esm/llm/adapters/anthropic.js.map +1 -1
  137. package/dist/esm/llm/adapters/gemini.js +98 -7
  138. package/dist/esm/llm/adapters/gemini.js.map +1 -1
  139. package/dist/esm/llm/adapters/index.js +15 -4
  140. package/dist/esm/llm/adapters/index.js.map +1 -1
  141. package/dist/esm/llm/adapters/ollama.js +117 -2
  142. package/dist/esm/llm/adapters/ollama.js.map +1 -1
  143. package/dist/esm/llm/adapters/openai.js +105 -1
  144. package/dist/esm/llm/adapters/openai.js.map +1 -1
  145. package/dist/esm/mcp/cli.js +267 -0
  146. package/dist/esm/mcp/cli.js.map +1 -0
  147. package/dist/esm/mcp/index.js +39 -0
  148. package/dist/esm/mcp/index.js.map +1 -0
  149. package/dist/esm/mcp/prompts.js +419 -0
  150. package/dist/esm/mcp/prompts.js.map +1 -0
  151. package/dist/esm/mcp/resources.js +359 -0
  152. package/dist/esm/mcp/resources.js.map +1 -0
  153. package/dist/esm/mcp/server.js +372 -0
  154. package/dist/esm/mcp/server.js.map +1 -0
  155. package/dist/esm/mcp/tools.js +598 -0
  156. package/dist/esm/mcp/tools.js.map +1 -0
  157. package/dist/esm/mcp/types.js +9 -0
  158. package/dist/esm/mcp/types.js.map +1 -0
  159. package/dist/esm/query/index.js +11 -5
  160. package/dist/esm/query/index.js.map +1 -1
  161. package/dist/esm/query/path.js +308 -0
  162. package/dist/esm/query/path.js.map +1 -0
  163. package/dist/esm/query/spaced-repetition.js +292 -0
  164. package/dist/esm/query/spaced-repetition.js.map +1 -0
  165. package/dist/esm/query/zpd.js +211 -0
  166. package/dist/esm/query/zpd.js.map +1 -0
  167. package/dist/esm/types/assessment.js +40 -0
  168. package/dist/esm/types/assessment.js.map +1 -0
  169. package/dist/esm/types/bloom.js +11 -0
  170. package/dist/esm/types/bloom.js.map +1 -1
  171. package/dist/esm/types/index.js +2 -1
  172. package/dist/esm/types/index.js.map +1 -1
  173. package/dist/types/api/routes/analytics.d.ts +14 -0
  174. package/dist/types/api/routes/analytics.d.ts.map +1 -0
  175. package/dist/types/api/routes/assessments.d.ts +14 -0
  176. package/dist/types/api/routes/assessments.d.ts.map +1 -0
  177. package/dist/types/api/routes/curriculum.d.ts +14 -0
  178. package/dist/types/api/routes/curriculum.d.ts.map +1 -0
  179. package/dist/types/api/routes/edges.d.ts +14 -0
  180. package/dist/types/api/routes/edges.d.ts.map +1 -0
  181. package/dist/types/api/routes/explore.d.ts +14 -0
  182. package/dist/types/api/routes/explore.d.ts.map +1 -0
  183. package/dist/types/api/routes/learners.d.ts +14 -0
  184. package/dist/types/api/routes/learners.d.ts.map +1 -0
  185. package/dist/types/api/routes/me.d.ts +14 -0
  186. package/dist/types/api/routes/me.d.ts.map +1 -0
  187. package/dist/types/api/routes/skills.d.ts +14 -0
  188. package/dist/types/api/routes/skills.d.ts.map +1 -0
  189. package/dist/types/api/server.d.ts +147 -0
  190. package/dist/types/api/server.d.ts.map +1 -0
  191. package/dist/types/api/types.d.ts +443 -0
  192. package/dist/types/api/types.d.ts.map +1 -0
  193. package/dist/types/assessment/adaptive.d.ts +155 -0
  194. package/dist/types/assessment/adaptive.d.ts.map +1 -0
  195. package/dist/types/assessment/bkt.d.ts +185 -0
  196. package/dist/types/assessment/bkt.d.ts.map +1 -0
  197. package/dist/types/assessment/index.d.ts +18 -0
  198. package/dist/types/assessment/index.d.ts.map +1 -0
  199. package/dist/types/assessment/irt.d.ts +159 -0
  200. package/dist/types/assessment/irt.d.ts.map +1 -0
  201. package/dist/types/assessment/mastery-engine.d.ts +178 -0
  202. package/dist/types/assessment/mastery-engine.d.ts.map +1 -0
  203. package/dist/types/components/LearningPathView.d.ts +40 -0
  204. package/dist/types/components/LearningPathView.d.ts.map +1 -0
  205. package/dist/types/components/ProgressDashboard.d.ts +49 -0
  206. package/dist/types/components/ProgressDashboard.d.ts.map +1 -0
  207. package/dist/types/components/SkillCard.d.ts +34 -0
  208. package/dist/types/components/SkillCard.d.ts.map +1 -0
  209. package/dist/types/components/SkillExplorer.d.ts +39 -0
  210. package/dist/types/components/SkillExplorer.d.ts.map +1 -0
  211. package/dist/types/components/SkillGraph.d.ts +38 -0
  212. package/dist/types/components/SkillGraph.d.ts.map +1 -0
  213. package/dist/types/components/hooks.d.ts +187 -0
  214. package/dist/types/components/hooks.d.ts.map +1 -0
  215. package/dist/types/components/index.d.ts +59 -0
  216. package/dist/types/components/index.d.ts.map +1 -0
  217. package/dist/types/components/types.d.ts +410 -0
  218. package/dist/types/components/types.d.ts.map +1 -0
  219. package/dist/types/index.d.ts +2 -1
  220. package/dist/types/index.d.ts.map +1 -1
  221. package/dist/types/llm/adapters/anthropic.d.ts +84 -1
  222. package/dist/types/llm/adapters/anthropic.d.ts.map +1 -1
  223. package/dist/types/llm/adapters/gemini.d.ts +93 -6
  224. package/dist/types/llm/adapters/gemini.d.ts.map +1 -1
  225. package/dist/types/llm/adapters/index.d.ts +13 -4
  226. package/dist/types/llm/adapters/index.d.ts.map +1 -1
  227. package/dist/types/llm/adapters/ollama.d.ts +126 -1
  228. package/dist/types/llm/adapters/ollama.d.ts.map +1 -1
  229. package/dist/types/llm/adapters/openai.d.ts +104 -1
  230. package/dist/types/llm/adapters/openai.d.ts.map +1 -1
  231. package/dist/types/mcp/cli.d.ts +15 -0
  232. package/dist/types/mcp/cli.d.ts.map +1 -0
  233. package/dist/types/mcp/index.d.ts +32 -0
  234. package/dist/types/mcp/index.d.ts.map +1 -0
  235. package/dist/types/mcp/prompts.d.ts +27 -0
  236. package/dist/types/mcp/prompts.d.ts.map +1 -0
  237. package/dist/types/mcp/resources.d.ts +59 -0
  238. package/dist/types/mcp/resources.d.ts.map +1 -0
  239. package/dist/types/mcp/server.d.ts +136 -0
  240. package/dist/types/mcp/server.d.ts.map +1 -0
  241. package/dist/types/mcp/tools.d.ts +344 -0
  242. package/dist/types/mcp/tools.d.ts.map +1 -0
  243. package/dist/types/mcp/types.d.ts +137 -0
  244. package/dist/types/mcp/types.d.ts.map +1 -0
  245. package/dist/types/query/index.d.ts +8 -0
  246. package/dist/types/query/index.d.ts.map +1 -1
  247. package/dist/types/query/path.d.ts +102 -0
  248. package/dist/types/query/path.d.ts.map +1 -0
  249. package/dist/types/query/spaced-repetition.d.ts +135 -0
  250. package/dist/types/query/spaced-repetition.d.ts.map +1 -0
  251. package/dist/types/query/zpd.d.ts +97 -0
  252. package/dist/types/query/zpd.d.ts.map +1 -0
  253. package/dist/types/types/assessment.d.ts +512 -0
  254. package/dist/types/types/assessment.d.ts.map +1 -0
  255. package/dist/types/types/bloom.d.ts +4 -0
  256. package/dist/types/types/bloom.d.ts.map +1 -1
  257. package/dist/types/types/index.d.ts +3 -1
  258. package/dist/types/types/index.d.ts.map +1 -1
  259. package/package.json +48 -3
@@ -0,0 +1,354 @@
1
+ /**
2
+ * Bayesian Knowledge Tracing (BKT)
3
+ *
4
+ * Implements the classic BKT model for tracking learner mastery.
5
+ * BKT is a hidden Markov model with two hidden states (mastery/no mastery)
6
+ * and uses four parameters:
7
+ * - P(L₀): Prior probability of mastery (pInit)
8
+ * - P(T): Probability of learning/transition (pLearn)
9
+ * - P(S): Probability of slip (wrong despite mastery) (pSlip)
10
+ * - P(G): Probability of guess (correct despite no mastery) (pGuess)
11
+ *
12
+ * @see Corbett & Anderson (1994). Knowledge tracing: Modeling the acquisition
13
+ * of procedural knowledge. User Modeling and User-Adapted Interaction.
14
+ *
15
+ * @packageDocumentation
16
+ */
17
+ import { BKT_DEFAULTS } from '../types/assessment.js';
18
+ /**
19
+ * Default BKT configuration
20
+ */
21
+ export const BKT_CONFIG_DEFAULTS = {
22
+ masteryThreshold: 0.95,
23
+ individualizedParams: false,
24
+ trackHistory: false,
25
+ };
26
+ /**
27
+ * Bayesian Knowledge Tracing Engine
28
+ *
29
+ * Tracks learner mastery using the classic BKT model.
30
+ * Can be used with skill-level or global parameters.
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * const bkt = new BKTEngine();
35
+ *
36
+ * // Initialize state for a skill
37
+ * let state = bkt.initializeState('skill-1');
38
+ *
39
+ * // Update after correct response
40
+ * state = bkt.update(state, true).state;
41
+ * console.log(`Mastery: ${state.pMastery.toFixed(2)}`);
42
+ *
43
+ * // Update after incorrect response
44
+ * state = bkt.update(state, false).state;
45
+ * ```
46
+ */
47
+ export class BKTEngine {
48
+ config;
49
+ skillParams;
50
+ globalParams;
51
+ constructor(config = {}, globalParams = BKT_DEFAULTS) {
52
+ this.config = { ...BKT_CONFIG_DEFAULTS, ...config };
53
+ this.globalParams = globalParams;
54
+ this.skillParams = new Map();
55
+ }
56
+ /**
57
+ * Set parameters for a specific skill
58
+ */
59
+ setSkillParameters(skillId, params) {
60
+ this.skillParams.set(skillId, params);
61
+ }
62
+ /**
63
+ * Get parameters for a skill (falls back to global)
64
+ */
65
+ getParameters(skillId) {
66
+ if (skillId && this.config.individualizedParams) {
67
+ return this.skillParams.get(skillId) ?? this.globalParams;
68
+ }
69
+ return this.globalParams;
70
+ }
71
+ /**
72
+ * Initialize BKT state for a skill
73
+ */
74
+ initializeState(skillId) {
75
+ const params = this.getParameters(skillId);
76
+ const baseState = {
77
+ skillId,
78
+ pMastery: params.pInit,
79
+ observations: 0,
80
+ };
81
+ if (this.config.trackHistory) {
82
+ baseState.history = [];
83
+ }
84
+ return baseState;
85
+ }
86
+ /**
87
+ * Update BKT state based on an observed response
88
+ *
89
+ * Uses Bayes' theorem to update the mastery probability:
90
+ * - For correct response: P(Lₙ|correct) ∝ P(correct|Lₙ) × P(Lₙ)
91
+ * - For incorrect response: P(Lₙ|incorrect) ∝ P(incorrect|Lₙ) × P(Lₙ)
92
+ *
93
+ * Then applies the learning transition.
94
+ *
95
+ * @param state - Current BKT state
96
+ * @param correct - Whether the response was correct
97
+ * @param skillId - Optional skill ID for skill-specific parameters
98
+ * @returns Updated state and result information
99
+ */
100
+ update(state, correct, skillId) {
101
+ const params = this.getParameters(skillId ?? state.skillId);
102
+ const previousMastery = state.pMastery;
103
+ // Calculate likelihood of observation given each hidden state
104
+ // P(correct | mastered) = 1 - P(slip)
105
+ // P(correct | not mastered) = P(guess)
106
+ const pCorrectGivenMastery = 1 - params.pSlip;
107
+ const pCorrectGivenNoMastery = params.pGuess;
108
+ // Calculate posterior probability of mastery given observation
109
+ let pMasteryGivenObs;
110
+ let likelihood;
111
+ if (correct) {
112
+ // P(L|correct) = P(correct|L) × P(L) / P(correct)
113
+ const pCorrect = pCorrectGivenMastery * state.pMastery +
114
+ pCorrectGivenNoMastery * (1 - state.pMastery);
115
+ pMasteryGivenObs = (pCorrectGivenMastery * state.pMastery) / pCorrect;
116
+ likelihood = pCorrect;
117
+ }
118
+ else {
119
+ // P(L|incorrect) = P(incorrect|L) × P(L) / P(incorrect)
120
+ const pIncorrect = params.pSlip * state.pMastery +
121
+ (1 - params.pGuess) * (1 - state.pMastery);
122
+ pMasteryGivenObs = (params.pSlip * state.pMastery) / pIncorrect;
123
+ likelihood = pIncorrect;
124
+ }
125
+ // Apply learning transition: P(Lₙ₊₁) = P(Lₙ|obs) + P(T) × (1 - P(Lₙ|obs))
126
+ // This accounts for the possibility of learning during the opportunity
127
+ const pMastery = pMasteryGivenObs + params.pLearn * (1 - pMasteryGivenObs);
128
+ // Build updated state
129
+ const newState = {
130
+ skillId: state.skillId,
131
+ pMastery,
132
+ observations: state.observations + 1,
133
+ };
134
+ if (this.config.trackHistory) {
135
+ newState.history = [...(state.history ?? []), correct];
136
+ }
137
+ const result = {
138
+ pMastery,
139
+ isMastered: pMastery >= this.config.masteryThreshold,
140
+ likelihood,
141
+ previousMastery,
142
+ };
143
+ return { state: newState, result };
144
+ }
145
+ /**
146
+ * Update from multiple responses
147
+ */
148
+ updateBatch(state, responses, skillId) {
149
+ let currentState = state;
150
+ const results = [];
151
+ for (const correct of responses) {
152
+ const { state: newState, result } = this.update(currentState, correct, skillId);
153
+ currentState = newState;
154
+ results.push(result);
155
+ }
156
+ return { state: currentState, results };
157
+ }
158
+ /**
159
+ * Predict the probability of a correct response
160
+ */
161
+ predict(state, skillId) {
162
+ const params = this.getParameters(skillId ?? state.skillId);
163
+ // P(correct) = P(correct|mastered) × P(mastered) + P(correct|not mastered) × P(not mastered)
164
+ const pCorrect = (1 - params.pSlip) * state.pMastery +
165
+ params.pGuess * (1 - state.pMastery);
166
+ // What would mastery be after correct/incorrect?
167
+ const { state: stateIfCorrect } = this.update({ ...state }, true, skillId);
168
+ const { state: stateIfIncorrect } = this.update({ ...state }, false, skillId);
169
+ return {
170
+ pCorrect,
171
+ masteryIfCorrect: stateIfCorrect.pMastery,
172
+ masteryIfIncorrect: stateIfIncorrect.pMastery,
173
+ };
174
+ }
175
+ /**
176
+ * Estimate number of opportunities until mastery
177
+ *
178
+ * Uses a forward simulation assuming consistent correct responses.
179
+ */
180
+ estimateOpportunitiesToMastery(state, skillId, maxOpportunities = 100) {
181
+ if (state.pMastery >= this.config.masteryThreshold) {
182
+ return 0;
183
+ }
184
+ let currentState = { ...state };
185
+ for (let i = 1; i <= maxOpportunities; i++) {
186
+ // Simulate correct response
187
+ const { state: newState } = this.update(currentState, true, skillId);
188
+ if (newState.pMastery >= this.config.masteryThreshold) {
189
+ return i;
190
+ }
191
+ currentState = newState;
192
+ }
193
+ return null; // Mastery not achievable within max opportunities
194
+ }
195
+ /**
196
+ * Check if mastery threshold is met
197
+ */
198
+ isMastered(state) {
199
+ return state.pMastery >= this.config.masteryThreshold;
200
+ }
201
+ /**
202
+ * Convert BKT state to MasteryState for integration with other systems
203
+ */
204
+ toMasteryState(state) {
205
+ return {
206
+ skillId: state.skillId,
207
+ mastery: state.pMastery,
208
+ attempts: state.observations,
209
+ streak: this.calculateStreak(state),
210
+ };
211
+ }
212
+ /**
213
+ * Calculate current streak from history
214
+ */
215
+ calculateStreak(state) {
216
+ if (!state.history || state.history.length === 0) {
217
+ return 0;
218
+ }
219
+ let streak = 0;
220
+ for (let i = state.history.length - 1; i >= 0; i--) {
221
+ if (state.history[i]) {
222
+ streak++;
223
+ }
224
+ else {
225
+ break;
226
+ }
227
+ }
228
+ return streak;
229
+ }
230
+ }
231
+ /**
232
+ * Fit BKT parameters to response data
233
+ *
234
+ * @param sequences - Array of response sequences (true = correct)
235
+ * @param gridSize - Number of values to try for each parameter
236
+ * @returns Best fitting parameters
237
+ *
238
+ * @example
239
+ * ```typescript
240
+ * const sequences = [
241
+ * [false, false, true, true, true],
242
+ * [true, false, true, true, true],
243
+ * [false, true, true, true, true],
244
+ * ];
245
+ *
246
+ * const result = fitBKTParameters(sequences);
247
+ * console.log('Best parameters:', result.params);
248
+ * ```
249
+ */
250
+ export function fitBKTParameters(sequences, gridSize = 10) {
251
+ // Generate grid values
252
+ const values = Array.from({ length: gridSize }, (_, i) => (i + 1) / (gridSize + 1));
253
+ // Constraints on parameters
254
+ const pInitValues = values.filter((v) => v >= 0.1 && v <= 0.9);
255
+ const pLearnValues = values.filter((v) => v >= 0.01 && v <= 0.5);
256
+ const pSlipValues = values.filter((v) => v >= 0.01 && v <= 0.3);
257
+ const pGuessValues = values.filter((v) => v >= 0.01 && v <= 0.4);
258
+ let bestParams = BKT_DEFAULTS;
259
+ let bestLogLikelihood = -Infinity;
260
+ let evaluations = 0;
261
+ // Grid search
262
+ for (const pInit of pInitValues) {
263
+ for (const pLearn of pLearnValues) {
264
+ for (const pSlip of pSlipValues) {
265
+ for (const pGuess of pGuessValues) {
266
+ // Skip invalid combinations (guess + slip should be < 1 for identifiability)
267
+ if (pSlip + pGuess >= 1)
268
+ continue;
269
+ const params = { pInit, pLearn, pSlip, pGuess };
270
+ const logLikelihood = calculateLogLikelihood(sequences, params);
271
+ evaluations++;
272
+ if (logLikelihood > bestLogLikelihood) {
273
+ bestLogLikelihood = logLikelihood;
274
+ bestParams = params;
275
+ }
276
+ }
277
+ }
278
+ }
279
+ }
280
+ return {
281
+ params: bestParams,
282
+ logLikelihood: bestLogLikelihood,
283
+ evaluations,
284
+ };
285
+ }
286
+ /**
287
+ * Calculate log-likelihood of response sequences given BKT parameters
288
+ */
289
+ export function calculateLogLikelihood(sequences, params) {
290
+ let totalLogLikelihood = 0;
291
+ for (const sequence of sequences) {
292
+ let pMastery = params.pInit;
293
+ for (const correct of sequence) {
294
+ // P(correct | state)
295
+ const pCorrectGivenMastery = 1 - params.pSlip;
296
+ const pCorrectGivenNoMastery = params.pGuess;
297
+ // P(observation)
298
+ const pObs = correct
299
+ ? pCorrectGivenMastery * pMastery + pCorrectGivenNoMastery * (1 - pMastery)
300
+ : params.pSlip * pMastery + (1 - params.pGuess) * (1 - pMastery);
301
+ // Avoid log(0)
302
+ totalLogLikelihood += Math.log(Math.max(pObs, 1e-10));
303
+ // Update mastery
304
+ if (correct) {
305
+ const pCorrect = pCorrectGivenMastery * pMastery +
306
+ pCorrectGivenNoMastery * (1 - pMastery);
307
+ pMastery = (pCorrectGivenMastery * pMastery) / pCorrect;
308
+ }
309
+ else {
310
+ const pIncorrect = params.pSlip * pMastery + (1 - params.pGuess) * (1 - pMastery);
311
+ pMastery = (params.pSlip * pMastery) / pIncorrect;
312
+ }
313
+ // Learning transition
314
+ pMastery = pMastery + params.pLearn * (1 - pMastery);
315
+ }
316
+ }
317
+ return totalLogLikelihood;
318
+ }
319
+ /**
320
+ * Create a BKT engine with default configuration
321
+ */
322
+ export function createBKTEngine(config, params) {
323
+ return new BKTEngine(config, params);
324
+ }
325
+ /**
326
+ * Quick mastery estimation using BKT
327
+ *
328
+ * Convenience function for simple use cases.
329
+ *
330
+ * @param responses - Sequence of correct/incorrect responses
331
+ * @param params - BKT parameters (optional, uses defaults)
332
+ * @returns Final mastery probability
333
+ */
334
+ export function estimateMastery(responses, params = BKT_DEFAULTS) {
335
+ let pMastery = params.pInit;
336
+ for (const correct of responses) {
337
+ const pCorrectGivenMastery = 1 - params.pSlip;
338
+ const pCorrectGivenNoMastery = params.pGuess;
339
+ // Posterior
340
+ if (correct) {
341
+ const pCorrect = pCorrectGivenMastery * pMastery +
342
+ pCorrectGivenNoMastery * (1 - pMastery);
343
+ pMastery = (pCorrectGivenMastery * pMastery) / pCorrect;
344
+ }
345
+ else {
346
+ const pIncorrect = params.pSlip * pMastery + (1 - params.pGuess) * (1 - pMastery);
347
+ pMastery = (params.pSlip * pMastery) / pIncorrect;
348
+ }
349
+ // Learning transition
350
+ pMastery = pMastery + params.pLearn * (1 - pMastery);
351
+ }
352
+ return pMastery;
353
+ }
354
+ //# sourceMappingURL=bkt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bkt.js","sourceRoot":"","sources":["../../../src/assessment/bkt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Assessment Framework
3
+ *
4
+ * This module provides comprehensive assessment capabilities:
5
+ * - Bayesian Knowledge Tracing (BKT) for skill-level mastery
6
+ * - Item Response Theory (IRT) for ability estimation
7
+ * - Unified mastery estimation engine
8
+ * - Adaptive testing with intelligent item selection
9
+ *
10
+ * @packageDocumentation
11
+ */
12
+ export { createQuestionId, createAssessmentId, createResponseId, BKT_DEFAULTS, } from '../types/assessment.js';
13
+ // Bayesian Knowledge Tracing
14
+ export { BKTEngine, createBKTEngine, fitBKTParameters, calculateLogLikelihood, estimateMastery, BKT_CONFIG_DEFAULTS, } from './bkt.js';
15
+ // Item Response Theory
16
+ export { IRTEstimator, createIRTEstimator, calculateProbability, calculateProbabilityDerivative, calculateInformation, calculateTestInformation, calculateStandardError, selectNextItemMFI, abilityToPercentile, abilityToGradeLevel, estimateAbility, IRT_CONFIG_DEFAULTS, } from './irt.js';
17
+ // Mastery Engine
18
+ export { MasteryEngine, createMasteryEngine, MASTERY_ENGINE_DEFAULTS, } from './mastery-engine.js';
19
+ // Adaptive Testing
20
+ export { AdaptiveEngine, createAdaptiveEngine, createQuestionPool, ADAPTIVE_DEFAULTS, TERMINATION_DEFAULTS, } from './adaptive.js';
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/assessment/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA4CH,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,GACb,MAAM,wBAAwB,CAAC;AAEhC,6BAA6B;AAC7B,OAAO,EACL,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,mBAAmB,GAIpB,MAAM,UAAU,CAAC;AAElB,uBAAuB;AACvB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,8BAA8B,EAC9B,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,GAEpB,MAAM,UAAU,CAAC;AAElB,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,uBAAuB,GAIxB,MAAM,qBAAqB,CAAC;AAE7B,mBAAmB;AACnB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,GAGrB,MAAM,eAAe,CAAC"}