@intellectif/lk-core 1.4.0 → 1.5.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 (85) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +2 -0
  3. package/dist/{ai-CnmLPMzd.d.cts → ai-BYryFkF9.d.cts} +199 -5
  4. package/dist/ai-BYryFkF9.d.cts.map +1 -0
  5. package/dist/{ai-CnmLPMzd.d.ts → ai-BYryFkF9.d.ts} +199 -5
  6. package/dist/ai-BYryFkF9.d.ts.map +1 -0
  7. package/dist/ai-check.cjs +175 -17
  8. package/dist/ai-check.cjs.map +1 -1
  9. package/dist/ai-check.d.cts +13 -5
  10. package/dist/ai-check.d.cts.map +1 -1
  11. package/dist/ai-check.d.ts +13 -5
  12. package/dist/ai-check.d.ts.map +1 -1
  13. package/dist/ai-check.js +175 -17
  14. package/dist/ai-check.js.map +1 -1
  15. package/dist/{ai-writing-G6tnCGzw.cjs → ai-writing-Cen7-3qs.cjs} +412 -61
  16. package/dist/ai-writing-Cen7-3qs.cjs.map +1 -0
  17. package/dist/{ai-writing-CPpH9Qxq.js → ai-writing-D8PdhJJz.js} +395 -62
  18. package/dist/ai-writing-D8PdhJJz.js.map +1 -0
  19. package/dist/{index-BAfEHCnD.d.cts → index-Bg0aeWtM.d.cts} +327 -3
  20. package/dist/index-Bg0aeWtM.d.cts.map +1 -0
  21. package/dist/{index-2nigSf4N.d.cts → index-CxpiWedW.d.ts} +6 -2
  22. package/dist/index-CxpiWedW.d.ts.map +1 -0
  23. package/dist/{index-BqMXWuNC.d.cts → index-D7R3Ll8R.d.cts} +2 -2
  24. package/dist/{index-BqMXWuNC.d.cts.map → index-D7R3Ll8R.d.cts.map} +1 -1
  25. package/dist/{index-CVWvymVb.d.ts → index-DUaW1Tj5.d.ts} +327 -3
  26. package/dist/index-DUaW1Tj5.d.ts.map +1 -0
  27. package/dist/{index-B54baFUA.d.ts → index-qMbxed1B.d.cts} +6 -2
  28. package/dist/index-qMbxed1B.d.cts.map +1 -0
  29. package/dist/{index-CcHDTxIZ.d.ts → index-wMc1E_aM.d.ts} +2 -2
  30. package/dist/{index-CcHDTxIZ.d.ts.map → index-wMc1E_aM.d.ts.map} +1 -1
  31. package/dist/index.cjs +31 -130
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/index.d.cts +85 -95
  34. package/dist/index.d.cts.map +1 -1
  35. package/dist/index.d.ts +85 -95
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +9 -117
  38. package/dist/index.js.map +1 -1
  39. package/dist/{item-group-DroFXgLb.cjs → item-group-DEB7nLID.cjs} +2 -2
  40. package/dist/{item-group-DroFXgLb.cjs.map → item-group-DEB7nLID.cjs.map} +1 -1
  41. package/dist/{item-group-DXiR8nOr.js → item-group-DdSUCUjM.js} +2 -2
  42. package/dist/{item-group-DXiR8nOr.js.map → item-group-DdSUCUjM.js.map} +1 -1
  43. package/dist/{registry-DVi0LR_i.cjs → registry-Ce00A_OW.cjs} +184 -4
  44. package/dist/registry-Ce00A_OW.cjs.map +1 -0
  45. package/dist/{registry-Dsx9mNsS.js → registry-DaZRpqjW.js} +155 -5
  46. package/dist/registry-DaZRpqjW.js.map +1 -0
  47. package/dist/{schemas-Bdw0nGPo.js → schemas-BioKFf3F.js} +3 -3
  48. package/dist/{schemas-Bdw0nGPo.js.map → schemas-BioKFf3F.js.map} +1 -1
  49. package/dist/{schemas-DVbAOrtd.cjs → schemas-DksueYsu.cjs} +3 -3
  50. package/dist/{schemas-DVbAOrtd.cjs.map → schemas-DksueYsu.cjs.map} +1 -1
  51. package/dist/schemas.cjs +2 -2
  52. package/dist/schemas.d.cts +1 -1
  53. package/dist/schemas.d.ts +1 -1
  54. package/dist/schemas.js +2 -2
  55. package/dist/{scoring-BZqUkuDF.js → scoring-BKNNTz-s.js} +657 -3
  56. package/dist/scoring-BKNNTz-s.js.map +1 -0
  57. package/dist/{scoring-B2_HEhMT.cjs → scoring-lKQVYsxy.cjs} +722 -2
  58. package/dist/scoring-lKQVYsxy.cjs.map +1 -0
  59. package/dist/scoring.cjs +8 -2
  60. package/dist/scoring.d.cts +3 -3
  61. package/dist/scoring.d.ts +3 -3
  62. package/dist/scoring.js +3 -3
  63. package/dist/{xapi-DNzkSJ0S.cjs → xapi-NYrTlpID.cjs} +2 -2
  64. package/dist/{xapi-DNzkSJ0S.cjs.map → xapi-NYrTlpID.cjs.map} +1 -1
  65. package/dist/{xapi-CMTph7wG.js → xapi-wR6gu4qS.js} +2 -2
  66. package/dist/{xapi-CMTph7wG.js.map → xapi-wR6gu4qS.js.map} +1 -1
  67. package/dist/xapi.cjs +1 -1
  68. package/dist/xapi.d.cts +1 -1
  69. package/dist/xapi.d.ts +1 -1
  70. package/dist/xapi.js +1 -2
  71. package/package.json +2 -2
  72. package/vectors/README.md +24 -1
  73. package/vectors/scoring.json +18182 -1
  74. package/dist/ai-CnmLPMzd.d.cts.map +0 -1
  75. package/dist/ai-CnmLPMzd.d.ts.map +0 -1
  76. package/dist/ai-writing-CPpH9Qxq.js.map +0 -1
  77. package/dist/ai-writing-G6tnCGzw.cjs.map +0 -1
  78. package/dist/index-2nigSf4N.d.cts.map +0 -1
  79. package/dist/index-B54baFUA.d.ts.map +0 -1
  80. package/dist/index-BAfEHCnD.d.cts.map +0 -1
  81. package/dist/index-CVWvymVb.d.ts.map +0 -1
  82. package/dist/registry-DVi0LR_i.cjs.map +0 -1
  83. package/dist/registry-Dsx9mNsS.js.map +0 -1
  84. package/dist/scoring-B2_HEhMT.cjs.map +0 -1
  85. package/dist/scoring-BZqUkuDF.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,50 @@
1
1
  # @intellectif/lk-core
2
2
 
3
+ ## 1.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#112](https://github.com/intellectif/learning-kit/pull/112) [`3fc1049`](https://github.com/intellectif/learning-kit/commit/3fc1049d67e14f6f4a12c235f19952a988472978) Thanks [@diego28e](https://github.com/diego28e)! - **Assisted grading**: a model grades a written response for the record, and in an exam no model's grade counts until it has been measured against your teachers.
8
+
9
+ **Action required:** none. Nothing grades until you call it. Four union members are new: `DeferredReason` gains `awaiting_human_review`, `AiRefusal` gains `misses-criteria` and `out-of-scale`, and `AiCheckCase['feature']` gains `grading`. A `switch` over one of them without a `default` branch needs them.
10
+
11
+ - **Levels on a rubric:** a criterion can carry `levels`, lowest first, from 2 to 10, each a `label` and an optional `description`. A level scores `index / (levels − 1)`.
12
+ - `validateActivity` does not check them in 1.x, so a field of that name you already use stays valid.
13
+ - The critic warns `wr_levels_unreadable` when it cannot read them.
14
+ - `redact()` passes readable levels to the learner, `label` and `description` only.
15
+ - **The request and its check:**
16
+ - `aiGradingRequest` builds what a model is told: the response verbatim, the rubric with its levels, and a group's material.
17
+ - `checkAiGrading` accepts a grade whole or not at all. It needs every criterion once (`misses-criteria`), each on its own scale (`out-of-scale`), with corrections that quote the response (`misquotes-answer`).
18
+ - **The grade:** `gradeFromJudgement` computes the total as `gradeFromRubric` does, with the item's weights and pass line. It records the model and the prompt revision on `grader`.
19
+ - **Calibration:** `calibrationReport` measures one grader configuration (a model, a prompt revision, a rubric and a target) against people's grades of the same responses. It reports:
20
+
21
+ - exact and adjacent agreement, quadratic kappa and a confusion matrix, on levels;
22
+ - Pearson's r, mean absolute error and the standardised mean difference, everywhere;
23
+ - calibration error and the Brier score, where grades carry level probabilities;
24
+ - the degradation from two people's agreement.
25
+
26
+ It ships no thresholds.
27
+
28
+ - **Routing:** `routeGrade` decides whether a grade counts or goes to a person, and gives every reason, in a fixed order:
29
+
30
+ - no matching calibration, in an exam;
31
+ - a report below your thresholds;
32
+ - a model unsure of a level, or one that asked for review;
33
+ - low confidence;
34
+ - the audit sample, chosen by `inAuditSample`.
35
+
36
+ `outcomeFromRoutedGrade` holds a grade for a person as `deferred` / `awaiting_human_review`, with the grade kept on `pendingGrade`, so `composeAssessmentScore` keeps the attempt provisional.
37
+
38
+ - **New optional fields:**
39
+ - `levels` on a rubric criterion, its redacted form included;
40
+ - `levelProbabilities` on `CriterionScore`;
41
+ - `routing` on `GradeRecord`;
42
+ - `pendingGrade` on a deferred `ItemOutcome`.
43
+ - **`@intellectif/lk-core/ai-check`** has five grading cases, for a `grading` port.
44
+ - **The grade-stability corpus** gains 123 vectors for the new functions. The 635 before them are unchanged.
45
+
46
+ Guide: https://github.com/intellectif/learning-kit/blob/main/docs/grading.md
47
+
3
48
  ## 1.4.0
4
49
 
5
50
  ### Minor Changes
package/README.md CHANGED
@@ -25,6 +25,7 @@ npm install @intellectif/lk-core
25
25
  - **Dictation marking as data** — a dictation is graded by the character-level similarity of the typed text to the transcript, with one `ScoringDetail` per word carrying its own `score`. `alignDictation(data, text)` returns the same comparison the grade was made of (normalised strings, word pairings, which accepted transcript won), `diffDictationChars(reference, attempt)` the character-level edits for a marked display, and `dictationReferenceWords(data)` the ids and words a stored result can be checked against — so a review screen or an analytics job never re-implements the arithmetic. `score()` and `evaluate()` take an optional `{ rounding }` to compare the pass line as displayed.
26
26
  - **`evaluate(data, response)` → `ItemOutcome`** — the resilient result: `scored`, `deferred` (graded later by an AI or a human), `graded` (the grade came back), or `unscorable`. "Not graded yet" is expressible in the type system and is never conflated with a zero.
27
27
  - **Deferred grading, both directions** — `GradeRecord`, `gradeFromRubric()` (the weighted total as a pure function of the grader's judgements — never the model's arithmetic; declare `maxScore` per criterion if your grader works out of 100 or out of 9), `outcomeFromGrade()` (which refuses a record whose numbers cannot be a grade instead of mirroring them), `hasGrade()`.
28
+ - **Assisted grading, behind a calibration gate** — `aiGradingRequest` / `checkAiGrading` hold a model's grade of a written response to every criterion of the rubric, each on its own scale (levels the author writes, or a score); `gradeFromJudgement` computes the total. `calibrationReport` measures a model, prompt, rubric and target against your teachers' grades, and `routeGrade` sends a grade to a person, for reasons it names: in an exam, until a matching calibration is supplied. No thresholds ship: they are yours.
28
29
  - **Assessment composition** — `composeAssessmentScore()` for weighted, sectioned totals, with a `provisional` status so an unmarked essay never deflates a grade — and a grade out of contract (`NaN`, 85 "out of 1") never finalises one — and `RoundingPolicy` / `roundGrade` / `gte` / `classifyBand` keeping grade rounding and band classification as the two distinct operations they are.
29
30
  - **Item groups** — `Stimulus` + `ItemGroup` (one passage or recording serving several questions), `flattenSequence()` for seeded, shuffle-atomic presentation order with stable slot identity. Slot ids are positional by default (`"3"`, `"1.0"`); author a `slotKey` on an entry and its id survives an insert, so a stored response cannot slide onto a different question.
30
31
  - **Delivery policies** — `DeliveryPolicy` says what a school lets a learner see around a question: feedback, solutions, hints and AI help. `resolveDeliveryPolicy` spells one out (an unreadable setting restricts, never allows), `validateDeliveryPolicy` checks one before it is stored, and `combineDeliveryPolicies` keeps a setting on only where every policy leaves it on.
@@ -161,6 +162,7 @@ Zod is the single runtime dependency, pinned to one exact version and private: n
161
162
  - [Delivery policies](https://github.com/intellectif/learning-kit/blob/main/docs/delivery.md) — `DeliveryPolicy`, and recording it with an attempt.
162
163
  - [Scoring policies](https://github.com/intellectif/learning-kit/blob/main/docs/scoring.md) — `ItemScoringPolicy`: tries, which counts, what hints cost, and scoring them on a server.
163
164
  - [AI help for learners](https://github.com/intellectif/learning-kit/blob/main/docs/ai.md) — the AI contract, the checks, and the `ai-check` kit for your prompts.
165
+ - [Grading with a model](https://github.com/intellectif/learning-kit/blob/main/docs/grading.md) — a model's grade for the record: levels, calibration against your teachers, and where a grade goes.
164
166
  - [Project README](https://github.com/intellectif/learning-kit#readme) — the full picture, including the React renderers.
165
167
  - [Contributing](https://github.com/intellectif/learning-kit/blob/main/CONTRIBUTING.md) — adding a new activity type.
166
168
 
@@ -134,6 +134,57 @@ interface CriterionScore {
134
134
  weight?: number;
135
135
  /** Not applicable to this submission (e.g. interaction on a monologue task). */
136
136
  notApplicable?: boolean;
137
+ /**
138
+ * How likely each of the criterion's levels was, lowest first, when the
139
+ * grader said: a distribution, whose likeliest level is `band`. Kept on the
140
+ * record as the evidence a routing rule read (`routeGrade`) and a
141
+ * calibration measures (`calibrationReport`).
142
+ */
143
+ levelProbabilities?: number[];
144
+ }
145
+ /**
146
+ * What one calibration certifies: a model, a prompt revision, a rubric and a
147
+ * target language. A change to any of them is a different grader, measured
148
+ * afresh. Built by `graderConfiguration`.
149
+ */
150
+ interface GraderConfiguration {
151
+ /** The model's identifier, from the grade's `grader.model`. */
152
+ model: string;
153
+ /** The prompt revision, from the grade's `grader.promptHash`. */
154
+ promptHash: string;
155
+ /** `contentHash` of the item's rubric, levels and descriptors included. */
156
+ rubricHash: string;
157
+ /** The item's `languageTarget`, or `null` when it has none. */
158
+ languageTarget: string | null;
159
+ }
160
+ /**
161
+ * Why `routeGrade` sent a grade to a person, in this order:
162
+ *
163
+ * - `no-calibration` — in `exam`, no calibration report for this grader's exact
164
+ * configuration was supplied: a model's grade counts on a paper of record
165
+ * only once it has been measured;
166
+ * - `calibration-below-policy` — the report misses one of the policy's
167
+ * thresholds, for a criterion or for the total;
168
+ * - `unsure` — a criterion's likeliest level is less likely than the policy's
169
+ * `minLevelProbability`;
170
+ * - `model-asked` — the grader set `requiresHumanReview`;
171
+ * - `low-confidence` — the grader's own `confidence` is `low`, and the policy
172
+ * routes on it;
173
+ * - `audit-sample` — the response is in the audit sample: a person marks it
174
+ * too, without the model's grade, to keep the calibration current.
175
+ */
176
+ type GradeRoutingReason = 'no-calibration' | 'calibration-below-policy' | 'unsure' | 'model-asked' | 'low-confidence' | 'audit-sample';
177
+ /** Where a grade went, and why: the record an appeal reads. */
178
+ interface GradeRouting {
179
+ /** `model` when its grade counts; `person` when a person must mark it first. */
180
+ to: 'model' | 'person';
181
+ /** Every reason it went to a person, in {@link GradeRoutingReason}'s order; empty when it did not. */
182
+ reasons: GradeRoutingReason[];
183
+ /** The calibration report the decision read, by its hash and size, when one matched. */
184
+ calibration?: {
185
+ reportHash: string;
186
+ pairs: number;
187
+ };
137
188
  }
138
189
  /** A suggested correction anchored in the learner's own text. */
139
190
  interface InlineCorrection {
@@ -189,6 +240,8 @@ interface GradeRecord {
189
240
  usage?: GraderUsage;
190
241
  /** ISO 8601 timestamp of when the grade was produced. */
191
242
  gradedAt?: string;
243
+ /** Where `routeGrade` sent this grade, and why, when it was routed. */
244
+ routing?: GradeRouting;
192
245
  }
193
246
  //#endregion
194
247
  //#region src/types/xapi.d.ts
@@ -770,6 +823,17 @@ interface FillInTheBlanksData {
770
823
  /** What an author allows AI to do for this item: see {@link ActivityAiPermissions}. */
771
824
  ai?: ActivityAiPermissions;
772
825
  }
826
+ /**
827
+ * One level of a rubric criterion: what a response at this level does. Levels
828
+ * run from the lowest to the highest, and a grader judging against them names
829
+ * one.
830
+ */
831
+ interface WrittenResponseRubricLevel {
832
+ /** A short name, unique within its criterion: "Developing", "B1". */
833
+ label: string;
834
+ /** What a response at this level does, for the grader and the learner. */
835
+ description?: string;
836
+ }
773
837
  /** A single criterion within a written-response grading rubric. */
774
838
  interface WrittenResponseRubricCriterion {
775
839
  /** Criterion name (e.g. "Task achievement", "Grammar range"). */
@@ -778,6 +842,20 @@ interface WrittenResponseRubricCriterion {
778
842
  description?: string;
779
843
  /** Non-negative weight of this criterion in the overall grade. */
780
844
  weight: number;
845
+ /**
846
+ * The criterion's levels, lowest first: 2 to 10, each with a label unique
847
+ * within the criterion once case and spacing are ignored. A grader judging
848
+ * against levels names one, and the criterion scores the level's place on
849
+ * the scale, `index / (levels.length - 1)`: 0 for the lowest, 1 for the
850
+ * highest.
851
+ *
852
+ * Read by the grading functions (`aiGradingRequest`, `gradeFromJudgement`,
853
+ * `calibrationReport`), which report levels they cannot use. In 1.x
854
+ * `validateActivity` does not check it: your own fields pass through it, and
855
+ * a field of yours named `levels` stays valid. The item critic warns about
856
+ * levels the grading functions cannot read.
857
+ */
858
+ levels?: WrittenResponseRubricLevel[];
781
859
  }
782
860
  /** Grading rubric attached to a written-response activity. */
783
861
  interface WrittenResponseRubric {
@@ -1232,8 +1310,12 @@ interface DeferredScoringPartial {
1232
1310
  * a finite number, a `maxScore` of 0 or less, or a score outside 0 to
1233
1311
  * `maxScore`). The record is kept on `rejectedGrade`. A real grade is still
1234
1312
  * owed, so re-grade the slot: waiting will not bring one.
1313
+ * - `awaiting_human_review` — a model graded the response, and a routing rule
1314
+ * (`routeGrade`) sent it to a person: the grade does not count until a
1315
+ * person marks it. The model's grade is kept on `pendingGrade`, for the
1316
+ * person and for the next calibration.
1235
1317
  */
1236
- type DeferredReason = 'requires_async_grading' | 'no_response_recorded' | 'grade_rejected';
1318
+ type DeferredReason = 'requires_async_grading' | 'no_response_recorded' | 'grade_rejected' | 'awaiting_human_review';
1237
1319
  /**
1238
1320
  * The outcome of evaluating a learner response against an activity — the
1239
1321
  * union `evaluate()` returns. Unlike {@link ScoringResult}, it can express
@@ -1266,6 +1348,13 @@ type ItemOutcome = {
1266
1348
  * is mirrored onto the outcome, and nothing reads it as a grade.
1267
1349
  */
1268
1350
  rejectedGrade?: GradeRecord;
1351
+ /**
1352
+ * The model's grade a routing rule held for a person, when `reason` is
1353
+ * `awaiting_human_review`, with the decision on its `routing`. Kept for
1354
+ * the person and for the next calibration; nothing on it is mirrored
1355
+ * onto the outcome, and nothing reads it as a grade.
1356
+ */
1357
+ pendingGrade?: GradeRecord;
1269
1358
  } | {
1270
1359
  status: 'graded';
1271
1360
  /**
@@ -1951,8 +2040,15 @@ interface AiTextResult {
1951
2040
  * a word the engine did not mark, or on a sound it did not report.
1952
2041
  * `contradicts-item` is a critique of an item that points at a field the item
1953
2042
  * does not have, or quotes words that field does not contain.
1954
- */
1955
- type AiRefusal = 'malformed' | 'empty' | 'too-long' | 'contradicts-grade' | 'reveals-answer' | 'misquotes-answer' | 'contradicts-marks' | 'contradicts-item';
2043
+ * `misses-criteria` is a grade that leaves a rubric criterion out, renames
2044
+ * one, judges one twice, or calls one not applicable: judging fewer criteria
2045
+ * is judging a different task, and the total would be renormalised over the
2046
+ * rest. `out-of-scale` is a judgement off its criterion's scale: a level the
2047
+ * criterion does not have, a score outside 0 to 1, or level probabilities that
2048
+ * are not a distribution over its levels, or whose likeliest level is not the
2049
+ * one chosen.
2050
+ */
2051
+ type AiRefusal = 'malformed' | 'empty' | 'too-long' | 'contradicts-grade' | 'reveals-answer' | 'misquotes-answer' | 'contradicts-marks' | 'contradicts-item' | 'misses-criteria' | 'out-of-scale';
1956
2052
  /** One criterion of a written response's rubric, as the author wrote it. */
1957
2053
  interface AiRubricCriterionFact {
1958
2054
  name: string;
@@ -2063,6 +2159,104 @@ interface AiWritingFeedback {
2063
2159
  provenance?: AiProvenance;
2064
2160
  usage?: GraderUsage;
2065
2161
  }
2162
+ /** One criterion of the rubric a model grades against, as the author wrote it. */
2163
+ interface AiGradingCriterionFact {
2164
+ name: string;
2165
+ description?: string;
2166
+ weight: number;
2167
+ /**
2168
+ * The levels to choose from, lowest first, as the author wrote them; `null`
2169
+ * when the criterion is judged on a score from 0 to 1.
2170
+ */
2171
+ levels: {
2172
+ label: string;
2173
+ description?: string;
2174
+ }[] | null;
2175
+ }
2176
+ /**
2177
+ * What a model is told about a submitted written response it grades: the task
2178
+ * as the learner saw it, the response verbatim, and the rubric with its levels.
2179
+ */
2180
+ interface AiGradingFacts {
2181
+ activityType: 'written-response';
2182
+ activityId: string;
2183
+ title: string;
2184
+ /** The language the item is written in, when the author gave one. */
2185
+ locale?: string;
2186
+ prompt: string;
2187
+ /** The response, exactly as submitted. Every correction quotes it. */
2188
+ text: string;
2189
+ /** Recomputed with `countWords`, as the grader counts it. */
2190
+ wordCount: number;
2191
+ minWords: number;
2192
+ maxWords: number;
2193
+ withinWordBounds: boolean;
2194
+ /** Every criterion of the item's rubric, in its order. */
2195
+ rubric: AiGradingCriterionFact[];
2196
+ /** The target language and level, when the author gave one (e.g. `"en-B1"`). */
2197
+ languageTarget?: string;
2198
+ }
2199
+ /**
2200
+ * Asks a model to grade a submitted written response. Built on the server,
2201
+ * from the whole item: grading needs the rubric, never the learner's view.
2202
+ */
2203
+ interface AiGradingRequest {
2204
+ feature: 'grading';
2205
+ facts: AiGradingFacts;
2206
+ /** The material of the group the task sits in; absent outside a group. */
2207
+ material?: AiMaterialFacts;
2208
+ /** The language to write comments and feedback in, when known. */
2209
+ learnerLocale?: string;
2210
+ }
2211
+ /**
2212
+ * Why `aiGradingRequest` built no request:
2213
+ *
2214
+ * - `not-written-response` — the item is another type;
2215
+ * - `redacted` — a `redact()` projection: grading is done on the server, from
2216
+ * the whole item;
2217
+ * - `no-rubric` — no rubric, or a criterion without a name and a weight: a
2218
+ * model has nothing to be held to;
2219
+ * - `duplicate-criteria` — two criteria with one name once case and spacing are
2220
+ * ignored: a model cannot judge them apart (`path` names the later one);
2221
+ * - `unreadable-levels` — a criterion's `levels` are there but cannot be used
2222
+ * (`path` names them; the item critic's `wr_levels_unreadable` says why);
2223
+ * - `empty-response` — nothing was written, so there is nothing to judge.
2224
+ */
2225
+ type AiGradingRequestProblem = 'not-written-response' | 'redacted' | 'no-rubric' | 'duplicate-criteria' | 'unreadable-levels' | 'empty-response';
2226
+ /** A model's judgement of one criterion, as `checkAiGrading` accepted it. */
2227
+ interface AiGradedCriterion {
2228
+ /** The criterion's name, as the author wrote it. */
2229
+ name: string;
2230
+ /** The level chosen, as the author labelled it, on a criterion with levels. */
2231
+ level?: string;
2232
+ /**
2233
+ * From 0 to 1: the level's place on the scale, `index / (levels - 1)`, or the
2234
+ * model's score on a criterion without levels.
2235
+ */
2236
+ score: number;
2237
+ /** How likely each level is, lowest first, when the model said: a distribution. */
2238
+ probabilities?: number[];
2239
+ comment?: string;
2240
+ }
2241
+ /**
2242
+ * A model's grade of a written response as `checkAiGrading` accepted it: every
2243
+ * criterion of the rubric judged, on its own scale. The total is not here —
2244
+ * `gradeFromJudgement` computes it.
2245
+ */
2246
+ interface AiGradingJudgement {
2247
+ /** Every criterion of the rubric, once, in the rubric's order. */
2248
+ criteria: AiGradedCriterion[];
2249
+ /** Narrative feedback addressed to the learner. */
2250
+ feedback: string | null;
2251
+ /** Corrections, each anchored in the response, as on feedback on writing. */
2252
+ corrections: InlineCorrection[];
2253
+ /** How the model reached its verdict; for the record, never shown. */
2254
+ rationale?: string;
2255
+ /** The model asked for a person to mark this response. */
2256
+ requiresHumanReview: boolean;
2257
+ provenance?: AiProvenance;
2258
+ usage?: GraderUsage;
2259
+ }
2066
2260
  /** One sound of a word, as the engine reported it. */
2067
2261
  interface AiSoundFact {
2068
2262
  /** The sound expected, in the assessment's phoneme alphabet. */
@@ -2413,5 +2607,5 @@ interface AiVideoDraft {
2413
2607
  findings: ItemFinding[];
2414
2608
  }
2415
2609
  //#endregion
2416
- export { AiWritingFeedbackRequest as $, ReadAloudDimension as $t, AiGapSelectFacts as A, InlineCorrection as An, DictationLearnerResponse as At, AiReadingFacts as B, InteractionEvent as Bt, AiDraftsCall as C, XAPIVerbObject as Cn, ActivityResult as Ct, AiFeature as D, GraderKind as Dn, DeferredScoringPartial as Dt, AiExplanationRequest as E, Grader as En, DeferredReason as Et, AiItemFacts as F, GapSelectBank as Ft, AiSupportedActivityType as G, MediaPlaybackPolicy as Gt, AiRefusal as H, ItemOutcome as Ht, AiMaterialFacts as I, GapSelectChoice as It, AiVideoDraft as J, MultipleChoiceLearnerResponse as Jt, AiTextResult as K, MediaTrack as Kt, AiMultipleChoiceFacts as L, GapSelectData as Lt, AiGrade as M, TextMatchResult as Mn, DictationTolerance as Mt, AiGroupInput as N, levenshteinDistance as Nn, FillInTheBlanksData as Nt, AiFillInTheBlanksFacts as O, GraderUsage as On, DictationData as Ot, AiHintRequest as P, matchText as Pn, FillInTheBlanksLearnerResponse as Pt, AiWritingFeedback as Q, ReadAloudData as Qt, AiOptionFact as R, GapSelectGap as Rt, AiDrafts as S, XAPIStatement as Sn, ActivityMedia as St, AiDraftsRun as T, GradeRecord as Tn, BlankConfig as Tt, AiRubricCriterionFact as U, LearnerResponse as Ut, AiReadingWordFact as V, InteractionKind as Vt, AiSoundFact as W, LearnerResponseMap as Wt, AiWritingCorrection as X, MultipleChoiceOptionMedia as Xt, AiWordFact as Y, MultipleChoiceOption as Yt, AiWritingFacts as Z, NativeControlHint as Zt, AiDraftCaption as _, XAPIContextActivities as _n, ItemFinding as _t, AiCoachingRequest as a, ScoringDetail as an, SequenceSlot as at, AiDraftSource as b, XAPIResult as bn, ActivityDataMap as bt, AiCriterionJudgement as c, ValidationError as cn, StimulusKind as ct, AiCritiqueFinding as d, WrittenResponseLearnerResponse as dn, DraftComplete as dt, ReadAloudDimensionWeight as en, AiWritingFeedbackResult as et, AiCritiqueFindingResult as f, WrittenResponseRubric as fn, DraftContext as ft, AiDictationFacts as g, XAPIContext as gn, DraftValidationResult as gt, AiCritiqueResult as h, XAPIConfig as hn, DraftSeverity as ht, AiCoaching as i, RecordingRef as in, SequenceEntry as it, AiGeneratedDraft as j, TextMatchPolicy as jn, DictationSlowMedia as jt, AiGapFact as k, GradingState as kn, DictationEquivalence as kt, AiCritique as l, ValidationResult as ln, TimelineChapter as lt, AiCritiqueRequest as m, XAPIActor as mn, DraftNotComplete as mt, AiActivityInput as n, ReadAloudSlowMedia as nn, MediaProgress as nt, AiCoachingResult as o, ScoringOutcome as on, SequenceSlotGroup as ot, AiCritiqueKind as p, WrittenResponseRubricCriterion as pn, DraftIssue as pt, AiVerdict as q, MultipleChoiceData as qt, AiBlankFact as r, RecordingBounds as rn, MediaTimeline as rt, AiCoachingWord as s, ScoringResult as sn, Stimulus as st, ActivityAiPermissions as t, ReadAloudLearnerResponse as tn, ItemGroup as tt, AiCritiqueField as u, WrittenResponseData as un, TimelineCue as ut, AiDraftProblem as v, XAPIError as vn, ItemFindingSeverity as vt, AiDraftsRequest as w, CriterionScore as wn, ActivityType as wt, AiDraftType as x, XAPIScore as xn, ActivityFeedback as xt, AiDraftSettings as y, XAPIObject as yn, ActivityData as yt, AiProvenance as z, GapSelectLearnerResponse as zt };
2417
- //# sourceMappingURL=ai-CnmLPMzd.d.cts.map
2610
+ export { AiVerdict as $, MultipleChoiceData as $t, AiGapSelectFacts as A, XAPIVerbObject as An, ActivityType as At, AiHintRequest as B, InlineCorrection as Bn, FillInTheBlanksLearnerResponse as Bt, AiDraftsCall as C, XAPIContext as Cn, ItemFinding as Ct, AiFeature as D, XAPIResult as Dn, ActivityFeedback as Dt, AiExplanationRequest as E, XAPIObject as En, ActivityDataMap as Et, AiGradingFacts as F, Grader as Fn, DictationEquivalence as Ft, AiProvenance as G, GapSelectLearnerResponse as Gt, AiMaterialFacts as H, TextMatchResult as Hn, GapSelectChoice as Ht, AiGradingJudgement as I, GraderConfiguration as In, DictationLearnerResponse as It, AiRefusal as J, ItemOutcome as Jt, AiReadingFacts as K, InteractionEvent as Kt, AiGradingRequest as L, GraderKind as Ln, DictationSlowMedia as Lt, AiGrade as M, GradeRecord as Mn, DeferredReason as Mt, AiGradedCriterion as N, GradeRouting as Nn, DeferredScoringPartial as Nt, AiFillInTheBlanksFacts as O, XAPIScore as On, ActivityMedia as Ot, AiGradingCriterionFact as P, GradeRoutingReason as Pn, DictationData as Pt, AiTextResult as Q, MediaTrack as Qt, AiGradingRequestProblem as R, GraderUsage as Rn, DictationTolerance as Rt, AiDrafts as S, XAPIConfig as Sn, DraftValidationResult as St, AiDraftsRun as T, XAPIError as Tn, ActivityData as Tt, AiMultipleChoiceFacts as U, levenshteinDistance as Un, GapSelectData as Ut, AiItemFacts as V, TextMatchPolicy as Vn, GapSelectBank as Vt, AiOptionFact as W, matchText as Wn, GapSelectGap as Wt, AiSoundFact as X, LearnerResponseMap as Xt, AiRubricCriterionFact as Y, LearnerResponse as Yt, AiSupportedActivityType as Z, MediaPlaybackPolicy as Zt, AiDraftCaption as _, WrittenResponseLearnerResponse as _n, DraftComplete as _t, AiCoachingRequest as a, ReadAloudDimension as an, AiWritingFeedbackRequest as at, AiDraftSource as b, WrittenResponseRubricLevel as bn, DraftNotComplete as bt, AiCriterionJudgement as c, ReadAloudSlowMedia as cn, MediaProgress as ct, AiCritiqueFinding as d, ScoringDetail as dn, SequenceSlot as dt, MultipleChoiceLearnerResponse as en, AiVideoDraft as et, AiCritiqueFindingResult as f, ScoringOutcome as fn, SequenceSlotGroup as ft, AiDictationFacts as g, WrittenResponseData as gn, TimelineCue as gt, AiCritiqueResult as h, ValidationResult as hn, TimelineChapter as ht, AiCoaching as i, ReadAloudData as in, AiWritingFeedback as it, AiGeneratedDraft as j, CriterionScore as jn, BlankConfig as jt, AiGapFact as k, XAPIStatement as kn, ActivityResult as kt, AiCritique as l, RecordingBounds as ln, MediaTimeline as lt, AiCritiqueRequest as m, ValidationError as mn, StimulusKind as mt, AiActivityInput as n, MultipleChoiceOptionMedia as nn, AiWritingCorrection as nt, AiCoachingResult as o, ReadAloudDimensionWeight as on, AiWritingFeedbackResult as ot, AiCritiqueKind as p, ScoringResult as pn, Stimulus as pt, AiReadingWordFact as q, InteractionKind as qt, AiBlankFact as r, NativeControlHint as rn, AiWritingFacts as rt, AiCoachingWord as s, ReadAloudLearnerResponse as sn, ItemGroup as st, ActivityAiPermissions as t, MultipleChoiceOption as tn, AiWordFact as tt, AiCritiqueField as u, RecordingRef as un, SequenceEntry as ut, AiDraftProblem as v, WrittenResponseRubric as vn, DraftContext as vt, AiDraftsRequest as w, XAPIContextActivities as wn, ItemFindingSeverity as wt, AiDraftType as x, XAPIActor as xn, DraftSeverity as xt, AiDraftSettings as y, WrittenResponseRubricCriterion as yn, DraftIssue as yt, AiGroupInput as z, GradingState as zn, FillInTheBlanksData as zt };
2611
+ //# sourceMappingURL=ai-BYryFkF9.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-BYryFkF9.d.cts","names":[],"sources":["../src/scoring/text-match.ts","../src/types/grading.ts","../src/types/xapi.ts","../src/types/activity.ts","../src/types/authoring.ts","../src/types/item-group.ts","../src/types/ai.ts"],"mappings":"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"}
@@ -134,6 +134,57 @@ interface CriterionScore {
134
134
  weight?: number;
135
135
  /** Not applicable to this submission (e.g. interaction on a monologue task). */
136
136
  notApplicable?: boolean;
137
+ /**
138
+ * How likely each of the criterion's levels was, lowest first, when the
139
+ * grader said: a distribution, whose likeliest level is `band`. Kept on the
140
+ * record as the evidence a routing rule read (`routeGrade`) and a
141
+ * calibration measures (`calibrationReport`).
142
+ */
143
+ levelProbabilities?: number[];
144
+ }
145
+ /**
146
+ * What one calibration certifies: a model, a prompt revision, a rubric and a
147
+ * target language. A change to any of them is a different grader, measured
148
+ * afresh. Built by `graderConfiguration`.
149
+ */
150
+ interface GraderConfiguration {
151
+ /** The model's identifier, from the grade's `grader.model`. */
152
+ model: string;
153
+ /** The prompt revision, from the grade's `grader.promptHash`. */
154
+ promptHash: string;
155
+ /** `contentHash` of the item's rubric, levels and descriptors included. */
156
+ rubricHash: string;
157
+ /** The item's `languageTarget`, or `null` when it has none. */
158
+ languageTarget: string | null;
159
+ }
160
+ /**
161
+ * Why `routeGrade` sent a grade to a person, in this order:
162
+ *
163
+ * - `no-calibration` — in `exam`, no calibration report for this grader's exact
164
+ * configuration was supplied: a model's grade counts on a paper of record
165
+ * only once it has been measured;
166
+ * - `calibration-below-policy` — the report misses one of the policy's
167
+ * thresholds, for a criterion or for the total;
168
+ * - `unsure` — a criterion's likeliest level is less likely than the policy's
169
+ * `minLevelProbability`;
170
+ * - `model-asked` — the grader set `requiresHumanReview`;
171
+ * - `low-confidence` — the grader's own `confidence` is `low`, and the policy
172
+ * routes on it;
173
+ * - `audit-sample` — the response is in the audit sample: a person marks it
174
+ * too, without the model's grade, to keep the calibration current.
175
+ */
176
+ type GradeRoutingReason = 'no-calibration' | 'calibration-below-policy' | 'unsure' | 'model-asked' | 'low-confidence' | 'audit-sample';
177
+ /** Where a grade went, and why: the record an appeal reads. */
178
+ interface GradeRouting {
179
+ /** `model` when its grade counts; `person` when a person must mark it first. */
180
+ to: 'model' | 'person';
181
+ /** Every reason it went to a person, in {@link GradeRoutingReason}'s order; empty when it did not. */
182
+ reasons: GradeRoutingReason[];
183
+ /** The calibration report the decision read, by its hash and size, when one matched. */
184
+ calibration?: {
185
+ reportHash: string;
186
+ pairs: number;
187
+ };
137
188
  }
138
189
  /** A suggested correction anchored in the learner's own text. */
139
190
  interface InlineCorrection {
@@ -189,6 +240,8 @@ interface GradeRecord {
189
240
  usage?: GraderUsage;
190
241
  /** ISO 8601 timestamp of when the grade was produced. */
191
242
  gradedAt?: string;
243
+ /** Where `routeGrade` sent this grade, and why, when it was routed. */
244
+ routing?: GradeRouting;
192
245
  }
193
246
  //#endregion
194
247
  //#region src/types/xapi.d.ts
@@ -770,6 +823,17 @@ interface FillInTheBlanksData {
770
823
  /** What an author allows AI to do for this item: see {@link ActivityAiPermissions}. */
771
824
  ai?: ActivityAiPermissions;
772
825
  }
826
+ /**
827
+ * One level of a rubric criterion: what a response at this level does. Levels
828
+ * run from the lowest to the highest, and a grader judging against them names
829
+ * one.
830
+ */
831
+ interface WrittenResponseRubricLevel {
832
+ /** A short name, unique within its criterion: "Developing", "B1". */
833
+ label: string;
834
+ /** What a response at this level does, for the grader and the learner. */
835
+ description?: string;
836
+ }
773
837
  /** A single criterion within a written-response grading rubric. */
774
838
  interface WrittenResponseRubricCriterion {
775
839
  /** Criterion name (e.g. "Task achievement", "Grammar range"). */
@@ -778,6 +842,20 @@ interface WrittenResponseRubricCriterion {
778
842
  description?: string;
779
843
  /** Non-negative weight of this criterion in the overall grade. */
780
844
  weight: number;
845
+ /**
846
+ * The criterion's levels, lowest first: 2 to 10, each with a label unique
847
+ * within the criterion once case and spacing are ignored. A grader judging
848
+ * against levels names one, and the criterion scores the level's place on
849
+ * the scale, `index / (levels.length - 1)`: 0 for the lowest, 1 for the
850
+ * highest.
851
+ *
852
+ * Read by the grading functions (`aiGradingRequest`, `gradeFromJudgement`,
853
+ * `calibrationReport`), which report levels they cannot use. In 1.x
854
+ * `validateActivity` does not check it: your own fields pass through it, and
855
+ * a field of yours named `levels` stays valid. The item critic warns about
856
+ * levels the grading functions cannot read.
857
+ */
858
+ levels?: WrittenResponseRubricLevel[];
781
859
  }
782
860
  /** Grading rubric attached to a written-response activity. */
783
861
  interface WrittenResponseRubric {
@@ -1232,8 +1310,12 @@ interface DeferredScoringPartial {
1232
1310
  * a finite number, a `maxScore` of 0 or less, or a score outside 0 to
1233
1311
  * `maxScore`). The record is kept on `rejectedGrade`. A real grade is still
1234
1312
  * owed, so re-grade the slot: waiting will not bring one.
1313
+ * - `awaiting_human_review` — a model graded the response, and a routing rule
1314
+ * (`routeGrade`) sent it to a person: the grade does not count until a
1315
+ * person marks it. The model's grade is kept on `pendingGrade`, for the
1316
+ * person and for the next calibration.
1235
1317
  */
1236
- type DeferredReason = 'requires_async_grading' | 'no_response_recorded' | 'grade_rejected';
1318
+ type DeferredReason = 'requires_async_grading' | 'no_response_recorded' | 'grade_rejected' | 'awaiting_human_review';
1237
1319
  /**
1238
1320
  * The outcome of evaluating a learner response against an activity — the
1239
1321
  * union `evaluate()` returns. Unlike {@link ScoringResult}, it can express
@@ -1266,6 +1348,13 @@ type ItemOutcome = {
1266
1348
  * is mirrored onto the outcome, and nothing reads it as a grade.
1267
1349
  */
1268
1350
  rejectedGrade?: GradeRecord;
1351
+ /**
1352
+ * The model's grade a routing rule held for a person, when `reason` is
1353
+ * `awaiting_human_review`, with the decision on its `routing`. Kept for
1354
+ * the person and for the next calibration; nothing on it is mirrored
1355
+ * onto the outcome, and nothing reads it as a grade.
1356
+ */
1357
+ pendingGrade?: GradeRecord;
1269
1358
  } | {
1270
1359
  status: 'graded';
1271
1360
  /**
@@ -1951,8 +2040,15 @@ interface AiTextResult {
1951
2040
  * a word the engine did not mark, or on a sound it did not report.
1952
2041
  * `contradicts-item` is a critique of an item that points at a field the item
1953
2042
  * does not have, or quotes words that field does not contain.
1954
- */
1955
- type AiRefusal = 'malformed' | 'empty' | 'too-long' | 'contradicts-grade' | 'reveals-answer' | 'misquotes-answer' | 'contradicts-marks' | 'contradicts-item';
2043
+ * `misses-criteria` is a grade that leaves a rubric criterion out, renames
2044
+ * one, judges one twice, or calls one not applicable: judging fewer criteria
2045
+ * is judging a different task, and the total would be renormalised over the
2046
+ * rest. `out-of-scale` is a judgement off its criterion's scale: a level the
2047
+ * criterion does not have, a score outside 0 to 1, or level probabilities that
2048
+ * are not a distribution over its levels, or whose likeliest level is not the
2049
+ * one chosen.
2050
+ */
2051
+ type AiRefusal = 'malformed' | 'empty' | 'too-long' | 'contradicts-grade' | 'reveals-answer' | 'misquotes-answer' | 'contradicts-marks' | 'contradicts-item' | 'misses-criteria' | 'out-of-scale';
1956
2052
  /** One criterion of a written response's rubric, as the author wrote it. */
1957
2053
  interface AiRubricCriterionFact {
1958
2054
  name: string;
@@ -2063,6 +2159,104 @@ interface AiWritingFeedback {
2063
2159
  provenance?: AiProvenance;
2064
2160
  usage?: GraderUsage;
2065
2161
  }
2162
+ /** One criterion of the rubric a model grades against, as the author wrote it. */
2163
+ interface AiGradingCriterionFact {
2164
+ name: string;
2165
+ description?: string;
2166
+ weight: number;
2167
+ /**
2168
+ * The levels to choose from, lowest first, as the author wrote them; `null`
2169
+ * when the criterion is judged on a score from 0 to 1.
2170
+ */
2171
+ levels: {
2172
+ label: string;
2173
+ description?: string;
2174
+ }[] | null;
2175
+ }
2176
+ /**
2177
+ * What a model is told about a submitted written response it grades: the task
2178
+ * as the learner saw it, the response verbatim, and the rubric with its levels.
2179
+ */
2180
+ interface AiGradingFacts {
2181
+ activityType: 'written-response';
2182
+ activityId: string;
2183
+ title: string;
2184
+ /** The language the item is written in, when the author gave one. */
2185
+ locale?: string;
2186
+ prompt: string;
2187
+ /** The response, exactly as submitted. Every correction quotes it. */
2188
+ text: string;
2189
+ /** Recomputed with `countWords`, as the grader counts it. */
2190
+ wordCount: number;
2191
+ minWords: number;
2192
+ maxWords: number;
2193
+ withinWordBounds: boolean;
2194
+ /** Every criterion of the item's rubric, in its order. */
2195
+ rubric: AiGradingCriterionFact[];
2196
+ /** The target language and level, when the author gave one (e.g. `"en-B1"`). */
2197
+ languageTarget?: string;
2198
+ }
2199
+ /**
2200
+ * Asks a model to grade a submitted written response. Built on the server,
2201
+ * from the whole item: grading needs the rubric, never the learner's view.
2202
+ */
2203
+ interface AiGradingRequest {
2204
+ feature: 'grading';
2205
+ facts: AiGradingFacts;
2206
+ /** The material of the group the task sits in; absent outside a group. */
2207
+ material?: AiMaterialFacts;
2208
+ /** The language to write comments and feedback in, when known. */
2209
+ learnerLocale?: string;
2210
+ }
2211
+ /**
2212
+ * Why `aiGradingRequest` built no request:
2213
+ *
2214
+ * - `not-written-response` — the item is another type;
2215
+ * - `redacted` — a `redact()` projection: grading is done on the server, from
2216
+ * the whole item;
2217
+ * - `no-rubric` — no rubric, or a criterion without a name and a weight: a
2218
+ * model has nothing to be held to;
2219
+ * - `duplicate-criteria` — two criteria with one name once case and spacing are
2220
+ * ignored: a model cannot judge them apart (`path` names the later one);
2221
+ * - `unreadable-levels` — a criterion's `levels` are there but cannot be used
2222
+ * (`path` names them; the item critic's `wr_levels_unreadable` says why);
2223
+ * - `empty-response` — nothing was written, so there is nothing to judge.
2224
+ */
2225
+ type AiGradingRequestProblem = 'not-written-response' | 'redacted' | 'no-rubric' | 'duplicate-criteria' | 'unreadable-levels' | 'empty-response';
2226
+ /** A model's judgement of one criterion, as `checkAiGrading` accepted it. */
2227
+ interface AiGradedCriterion {
2228
+ /** The criterion's name, as the author wrote it. */
2229
+ name: string;
2230
+ /** The level chosen, as the author labelled it, on a criterion with levels. */
2231
+ level?: string;
2232
+ /**
2233
+ * From 0 to 1: the level's place on the scale, `index / (levels - 1)`, or the
2234
+ * model's score on a criterion without levels.
2235
+ */
2236
+ score: number;
2237
+ /** How likely each level is, lowest first, when the model said: a distribution. */
2238
+ probabilities?: number[];
2239
+ comment?: string;
2240
+ }
2241
+ /**
2242
+ * A model's grade of a written response as `checkAiGrading` accepted it: every
2243
+ * criterion of the rubric judged, on its own scale. The total is not here —
2244
+ * `gradeFromJudgement` computes it.
2245
+ */
2246
+ interface AiGradingJudgement {
2247
+ /** Every criterion of the rubric, once, in the rubric's order. */
2248
+ criteria: AiGradedCriterion[];
2249
+ /** Narrative feedback addressed to the learner. */
2250
+ feedback: string | null;
2251
+ /** Corrections, each anchored in the response, as on feedback on writing. */
2252
+ corrections: InlineCorrection[];
2253
+ /** How the model reached its verdict; for the record, never shown. */
2254
+ rationale?: string;
2255
+ /** The model asked for a person to mark this response. */
2256
+ requiresHumanReview: boolean;
2257
+ provenance?: AiProvenance;
2258
+ usage?: GraderUsage;
2259
+ }
2066
2260
  /** One sound of a word, as the engine reported it. */
2067
2261
  interface AiSoundFact {
2068
2262
  /** The sound expected, in the assessment's phoneme alphabet. */
@@ -2413,5 +2607,5 @@ interface AiVideoDraft {
2413
2607
  findings: ItemFinding[];
2414
2608
  }
2415
2609
  //#endregion
2416
- export { AiWritingFeedbackRequest as $, ReadAloudDimension as $t, AiGapSelectFacts as A, InlineCorrection as An, DictationLearnerResponse as At, AiReadingFacts as B, InteractionEvent as Bt, AiDraftsCall as C, XAPIVerbObject as Cn, ActivityResult as Ct, AiFeature as D, GraderKind as Dn, DeferredScoringPartial as Dt, AiExplanationRequest as E, Grader as En, DeferredReason as Et, AiItemFacts as F, GapSelectBank as Ft, AiSupportedActivityType as G, MediaPlaybackPolicy as Gt, AiRefusal as H, ItemOutcome as Ht, AiMaterialFacts as I, GapSelectChoice as It, AiVideoDraft as J, MultipleChoiceLearnerResponse as Jt, AiTextResult as K, MediaTrack as Kt, AiMultipleChoiceFacts as L, GapSelectData as Lt, AiGrade as M, TextMatchResult as Mn, DictationTolerance as Mt, AiGroupInput as N, levenshteinDistance as Nn, FillInTheBlanksData as Nt, AiFillInTheBlanksFacts as O, GraderUsage as On, DictationData as Ot, AiHintRequest as P, matchText as Pn, FillInTheBlanksLearnerResponse as Pt, AiWritingFeedback as Q, ReadAloudData as Qt, AiOptionFact as R, GapSelectGap as Rt, AiDrafts as S, XAPIStatement as Sn, ActivityMedia as St, AiDraftsRun as T, GradeRecord as Tn, BlankConfig as Tt, AiRubricCriterionFact as U, LearnerResponse as Ut, AiReadingWordFact as V, InteractionKind as Vt, AiSoundFact as W, LearnerResponseMap as Wt, AiWritingCorrection as X, MultipleChoiceOptionMedia as Xt, AiWordFact as Y, MultipleChoiceOption as Yt, AiWritingFacts as Z, NativeControlHint as Zt, AiDraftCaption as _, XAPIContextActivities as _n, ItemFinding as _t, AiCoachingRequest as a, ScoringDetail as an, SequenceSlot as at, AiDraftSource as b, XAPIResult as bn, ActivityDataMap as bt, AiCriterionJudgement as c, ValidationError as cn, StimulusKind as ct, AiCritiqueFinding as d, WrittenResponseLearnerResponse as dn, DraftComplete as dt, ReadAloudDimensionWeight as en, AiWritingFeedbackResult as et, AiCritiqueFindingResult as f, WrittenResponseRubric as fn, DraftContext as ft, AiDictationFacts as g, XAPIContext as gn, DraftValidationResult as gt, AiCritiqueResult as h, XAPIConfig as hn, DraftSeverity as ht, AiCoaching as i, RecordingRef as in, SequenceEntry as it, AiGeneratedDraft as j, TextMatchPolicy as jn, DictationSlowMedia as jt, AiGapFact as k, GradingState as kn, DictationEquivalence as kt, AiCritique as l, ValidationResult as ln, TimelineChapter as lt, AiCritiqueRequest as m, XAPIActor as mn, DraftNotComplete as mt, AiActivityInput as n, ReadAloudSlowMedia as nn, MediaProgress as nt, AiCoachingResult as o, ScoringOutcome as on, SequenceSlotGroup as ot, AiCritiqueKind as p, WrittenResponseRubricCriterion as pn, DraftIssue as pt, AiVerdict as q, MultipleChoiceData as qt, AiBlankFact as r, RecordingBounds as rn, MediaTimeline as rt, AiCoachingWord as s, ScoringResult as sn, Stimulus as st, ActivityAiPermissions as t, ReadAloudLearnerResponse as tn, ItemGroup as tt, AiCritiqueField as u, WrittenResponseData as un, TimelineCue as ut, AiDraftProblem as v, XAPIError as vn, ItemFindingSeverity as vt, AiDraftsRequest as w, CriterionScore as wn, ActivityType as wt, AiDraftType as x, XAPIScore as xn, ActivityFeedback as xt, AiDraftSettings as y, XAPIObject as yn, ActivityData as yt, AiProvenance as z, GapSelectLearnerResponse as zt };
2417
- //# sourceMappingURL=ai-CnmLPMzd.d.ts.map
2610
+ export { AiVerdict as $, MultipleChoiceData as $t, AiGapSelectFacts as A, XAPIVerbObject as An, ActivityType as At, AiHintRequest as B, InlineCorrection as Bn, FillInTheBlanksLearnerResponse as Bt, AiDraftsCall as C, XAPIContext as Cn, ItemFinding as Ct, AiFeature as D, XAPIResult as Dn, ActivityFeedback as Dt, AiExplanationRequest as E, XAPIObject as En, ActivityDataMap as Et, AiGradingFacts as F, Grader as Fn, DictationEquivalence as Ft, AiProvenance as G, GapSelectLearnerResponse as Gt, AiMaterialFacts as H, TextMatchResult as Hn, GapSelectChoice as Ht, AiGradingJudgement as I, GraderConfiguration as In, DictationLearnerResponse as It, AiRefusal as J, ItemOutcome as Jt, AiReadingFacts as K, InteractionEvent as Kt, AiGradingRequest as L, GraderKind as Ln, DictationSlowMedia as Lt, AiGrade as M, GradeRecord as Mn, DeferredReason as Mt, AiGradedCriterion as N, GradeRouting as Nn, DeferredScoringPartial as Nt, AiFillInTheBlanksFacts as O, XAPIScore as On, ActivityMedia as Ot, AiGradingCriterionFact as P, GradeRoutingReason as Pn, DictationData as Pt, AiTextResult as Q, MediaTrack as Qt, AiGradingRequestProblem as R, GraderUsage as Rn, DictationTolerance as Rt, AiDrafts as S, XAPIConfig as Sn, DraftValidationResult as St, AiDraftsRun as T, XAPIError as Tn, ActivityData as Tt, AiMultipleChoiceFacts as U, levenshteinDistance as Un, GapSelectData as Ut, AiItemFacts as V, TextMatchPolicy as Vn, GapSelectBank as Vt, AiOptionFact as W, matchText as Wn, GapSelectGap as Wt, AiSoundFact as X, LearnerResponseMap as Xt, AiRubricCriterionFact as Y, LearnerResponse as Yt, AiSupportedActivityType as Z, MediaPlaybackPolicy as Zt, AiDraftCaption as _, WrittenResponseLearnerResponse as _n, DraftComplete as _t, AiCoachingRequest as a, ReadAloudDimension as an, AiWritingFeedbackRequest as at, AiDraftSource as b, WrittenResponseRubricLevel as bn, DraftNotComplete as bt, AiCriterionJudgement as c, ReadAloudSlowMedia as cn, MediaProgress as ct, AiCritiqueFinding as d, ScoringDetail as dn, SequenceSlot as dt, MultipleChoiceLearnerResponse as en, AiVideoDraft as et, AiCritiqueFindingResult as f, ScoringOutcome as fn, SequenceSlotGroup as ft, AiDictationFacts as g, WrittenResponseData as gn, TimelineCue as gt, AiCritiqueResult as h, ValidationResult as hn, TimelineChapter as ht, AiCoaching as i, ReadAloudData as in, AiWritingFeedback as it, AiGeneratedDraft as j, CriterionScore as jn, BlankConfig as jt, AiGapFact as k, XAPIStatement as kn, ActivityResult as kt, AiCritique as l, RecordingBounds as ln, MediaTimeline as lt, AiCritiqueRequest as m, ValidationError as mn, StimulusKind as mt, AiActivityInput as n, MultipleChoiceOptionMedia as nn, AiWritingCorrection as nt, AiCoachingResult as o, ReadAloudDimensionWeight as on, AiWritingFeedbackResult as ot, AiCritiqueKind as p, ScoringResult as pn, Stimulus as pt, AiReadingWordFact as q, InteractionKind as qt, AiBlankFact as r, NativeControlHint as rn, AiWritingFacts as rt, AiCoachingWord as s, ReadAloudLearnerResponse as sn, ItemGroup as st, ActivityAiPermissions as t, MultipleChoiceOption as tn, AiWordFact as tt, AiCritiqueField as u, RecordingRef as un, SequenceEntry as ut, AiDraftProblem as v, WrittenResponseRubric as vn, DraftContext as vt, AiDraftsRequest as w, XAPIContextActivities as wn, ItemFindingSeverity as wt, AiDraftType as x, XAPIActor as xn, DraftSeverity as xt, AiDraftSettings as y, WrittenResponseRubricCriterion as yn, DraftIssue as yt, AiGroupInput as z, GradingState as zn, FillInTheBlanksData as zt };
2611
+ //# sourceMappingURL=ai-BYryFkF9.d.ts.map