@intellectif/lk-core 0.20.0 → 0.22.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.
- package/CHANGELOG.md +32 -0
- package/README.md +30 -1
- package/dist/{activity-f0bgZSTP.d.cts → activity-CYc7SD3d.d.cts} +157 -11
- package/dist/{activity-f0bgZSTP.d.ts → activity-CYc7SD3d.d.ts} +157 -11
- package/dist/ai-check.cjs +103 -15
- package/dist/ai-check.cjs.map +1 -1
- package/dist/ai-check.d.cts +9 -5
- package/dist/ai-check.d.ts +9 -5
- package/dist/ai-check.js +102 -14
- package/dist/ai-check.js.map +1 -1
- package/dist/{chunk-BIJCO2HM.js → chunk-5UCR4UNR.js} +301 -20
- package/dist/chunk-5UCR4UNR.js.map +1 -0
- package/dist/{chunk-FVZJ4X3Y.cjs → chunk-OPMY2MNS.cjs} +302 -21
- package/dist/chunk-OPMY2MNS.cjs.map +1 -0
- package/dist/{chunk-MMEQKFFQ.js → chunk-Q7MV3IXJ.js} +196 -8
- package/dist/chunk-Q7MV3IXJ.js.map +1 -0
- package/dist/{chunk-COBK2RUX.cjs → chunk-WQVZPIN7.cjs} +197 -9
- package/dist/chunk-WQVZPIN7.cjs.map +1 -0
- package/dist/{index-BA9f2ydg.d.ts → index-0Z3-nnAP.d.ts} +1 -1
- package/dist/{index-7S3-TLjT.d.cts → index-CxxiNSSH.d.cts} +1 -1
- package/dist/index.cjs +56 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +93 -10
- package/dist/index.d.ts +93 -10
- package/dist/index.js +52 -5
- package/dist/index.js.map +1 -1
- package/dist/schemas.d.cts +2 -2
- package/dist/schemas.d.ts +2 -2
- package/dist/scoring.cjs +14 -2
- package/dist/scoring.cjs.map +1 -1
- package/dist/scoring.d.cts +240 -4
- package/dist/scoring.d.ts +240 -4
- package/dist/scoring.js +13 -1
- package/dist/xapi.d.cts +1 -1
- package/dist/xapi.d.ts +1 -1
- package/package.json +1 -1
- package/vectors/README.md +10 -0
- package/vectors/scoring.json +2127 -1
- package/dist/chunk-BIJCO2HM.js.map +0 -1
- package/dist/chunk-COBK2RUX.cjs.map +0 -1
- package/dist/chunk-FVZJ4X3Y.cjs.map +0 -1
- package/dist/chunk-MMEQKFFQ.js.map +0 -1
package/dist/index.d.cts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { A as ActivityAiPermissions, c as ActivityFeedback, e as ActivityResult, h as AiBlankFact, i as AiDictationFacts,
|
|
3
|
-
import { ScoredItem, RoundingPolicy, CompositionPolicy, AssessmentScore } from './scoring.cjs';
|
|
4
|
-
export { AssessmentSectionInput, Band, DEFAULT_PASS_THRESHOLD, DICTATION_MAX_ACCEPTED_TRANSCRIPTS, DICTATION_MAX_EQUIVALENCES, DICTATION_MAX_EQUIVALENCE_LENGTH, DICTATION_MAX_TEXT_LENGTH, DICTATION_MAX_TRANSCRIPT_LENGTH, DictationAlignment, DictationCharOp, DictationReference, DictationWordAlignment, GradeReadAloudOptions, PassFailureReason, READ_ALOUD_MAX_DIMENSION_WEIGHT, READ_ALOUD_MAX_REFERENCE_LENGTH, READ_ALOUD_MAX_SECONDS, READ_ALOUD_MAX_TAKES, ReadAloudWordAlignment, ReadAloudWordState, RoundingMode, SPEECH_ASSESSMENT_MAX_WORDS, ScoringOptions, SectionScore, SpeechAssessment, SpeechMeasurement, SpeechPhoneme, SpeechPhonemeCandidate, SpeechPlausibilityPolicy, SpeechSyllable, SpeechUnscorable, SpeechUnscorableCode, SpeechWord, SpeechWordError, WavInspection, WavInspectionPolicy, alignDictation, alignReadAloud, classifyBand, composeAssessmentScore, computePassThreshold, dictationReferenceWords, diffDictationChars, evaluate, gradeReadAloud, gte, inspectWav, outcomeFromUnscorable, roundGrade, score, validateSpeechAssessment } from './scoring.cjs';
|
|
5
|
-
import { a5 as SequenceSlot, a4 as SequenceEntry, I as ItemGroup, i as MediaProgress } from './index-
|
|
6
|
-
export { A as AiPermissionsSchema, B as BlankConfigSchema, D as DictationDataSchema, a as DictationEquivalenceSchema, b as DictationSlowMediaSchema, c as DictationToleranceSchema, F as FeedbackSchema, d as FillInTheBlanksDataSchema, G as GapSelectBankSchema, e as GapSelectChoiceSchema, f as GapSelectDataSchema, g as GapSelectGapSchema, h as ItemGroupSchema, M as MediaPlaybackSchema, j as MediaSchema, k as MediaTimeline, l as MediaTimelineSchema, m as MediaTrackSchema, n as MediaUrlSchema, o as MultipleChoiceDataSchema, p as MultipleChoiceOptionMediaSchema, q as MultipleChoiceOptionSchema, N as NativeControlHintSchema, R as ReadAloudDataSchema, r as ReadAloudSlowMediaSchema, s as RedactedActivity, t as RedactedBlankConfig, u as RedactedBlankConfigSchema, v as RedactedDictationData, w as RedactedDictationDataSchema, x as RedactedDictationSlowMedia, y as RedactedDictationSlowMediaSchema, z as RedactedFillInTheBlanksData, C as RedactedFillInTheBlanksDataSchema, E as RedactedGapSelectBank, H as RedactedGapSelectBankSchema, J as RedactedGapSelectChoice, K as RedactedGapSelectChoiceSchema, L as RedactedGapSelectData, O as RedactedGapSelectDataSchema, P as RedactedGapSelectGap, Q as RedactedGapSelectGapSchema, S as RedactedItemGroupSchema, T as RedactedMediaSchema, U as RedactedMultipleChoiceData, V as RedactedMultipleChoiceDataSchema, W as RedactedMultipleChoiceOption, X as RedactedMultipleChoiceOptionMedia, Y as RedactedMultipleChoiceOptionMediaSchema, Z as RedactedMultipleChoiceOptionSchema, _ as RedactedReadAloudData, $ as RedactedReadAloudDataSchema, a0 as RedactedStimulus, a1 as RedactedStimulusSchema, a2 as RedactedWrittenResponseData, a3 as RedactedWrittenResponseDataSchema, a6 as SequenceSlotGroup, a7 as Stimulus, a8 as StimulusKind, a9 as StimulusSchema, aa as TextMatchPolicySchema, ab as TimelineChapter, ac as TimelineChapterSchema, ad as TimelineCue, ae as TimelineCueSchema, af as WrittenResponseDataSchema, ag as WrittenResponseRubricCriterionSchema, ah as WrittenResponseRubricSchema, ai as dictationJsonSchema, aj as fillInTheBlanksJsonSchema, ak as gapSelectJsonSchema, al as itemGroupJsonSchema, am as jsonSchemaFor, an as multipleChoiceJsonSchema, ao as readAloudJsonSchema, ap as stimulusJsonSchema, aq as validateActivity, ar as validateItemGroup, as as writtenResponseJsonSchema } from './index-
|
|
1
|
+
import { x as AiSupportedActivityType, g as AiActivityInput, l as AiFeature, a4 as LearnerResponse, a3 as ItemOutcome, k as AiExplanationRequest, p as AiGrade, q as AiHintRequest, ak as ScoringDetail, r as AiItemFacts, y as AiTextResult, v as AiRefusal, F as AiWritingFeedbackRequest, E as AiWritingFeedback, a as ActivityData, ap as ValidationError, f as ActivityType, b as ActivityDataMap, I as CriterionScore, X as GradeRecord, ac as NativeControlHint, d as ActivityMedia, am as ScoringResult, K as DeferredScoringPartial, L as DictationData, N as DictationLearnerResponse, Q as FillInTheBlanksData, R as FillInTheBlanksLearnerResponse, U as GapSelectData, W as GapSelectLearnerResponse, a8 as MultipleChoiceData, a9 as MultipleChoiceLearnerResponse, ad as ReadAloudData, ag as ReadAloudLearnerResponse, ar as WrittenResponseData, as as WrittenResponseLearnerResponse } from './activity-CYc7SD3d.cjs';
|
|
2
|
+
export { A as ActivityAiPermissions, c as ActivityFeedback, e as ActivityResult, h as AiBlankFact, i as AiCriterionJudgement, j as AiDictationFacts, m as AiFillInTheBlanksFacts, n as AiGapFact, o as AiGapSelectFacts, s as AiMultipleChoiceFacts, t as AiOptionFact, u as AiProvenance, w as AiRubricCriterionFact, z as AiVerdict, B as AiWordFact, C as AiWritingCorrection, D as AiWritingFacts, G as AiWritingFeedbackResult, H as BlankConfig, J as DeferredReason, M as DictationEquivalence, O as DictationSlowMedia, P as DictationTolerance, S as GapSelectBank, T as GapSelectChoice, V as GapSelectGap, Y as Grader, Z as GraderKind, _ as GraderUsage, $ as GradingState, a0 as InlineCorrection, a1 as InteractionEvent, a2 as InteractionKind, a5 as LearnerResponseMap, a6 as MediaPlaybackPolicy, a7 as MediaTrack, aa as MultipleChoiceOption, ab as MultipleChoiceOptionMedia, ae as ReadAloudDimension, af as ReadAloudDimensionWeight, ah as ReadAloudSlowMedia, ai as RecordingBounds, aj as RecordingRef, al as ScoringOutcome, an as TextMatchPolicy, ao as TextMatchResult, aq as ValidationResult, at as WrittenResponseRubric, au as WrittenResponseRubricCriterion, av as XAPIActor, aw as XAPIConfig, ax as XAPIContext, ay as XAPIContextActivities, az as XAPIError, aA as XAPIObject, aB as XAPIResult, aC as XAPIScore, aD as XAPIStatement, aE as XAPIVerbObject, aF as levenshteinDistance, aG as matchText } from './activity-CYc7SD3d.cjs';
|
|
3
|
+
import { ResolvedItemScoringPolicy, ItemScoringPolicy, ScoredItem, RoundingPolicy, CompositionPolicy, AssessmentScore } from './scoring.cjs';
|
|
4
|
+
export { AssessmentSectionInput, Band, DEFAULT_ITEM_SCORING_POLICY, DEFAULT_PASS_THRESHOLD, DICTATION_MAX_ACCEPTED_TRANSCRIPTS, DICTATION_MAX_EQUIVALENCES, DICTATION_MAX_EQUIVALENCE_LENGTH, DICTATION_MAX_TEXT_LENGTH, DICTATION_MAX_TRANSCRIPT_LENGTH, DictationAlignment, DictationCharOp, DictationReference, DictationWordAlignment, EvaluateOptions, GradeReadAloudOptions, ITEM_SCORING_MAX_RETRIES, ItemScoringCount, ItemScoringPolicyIssue, ItemTriesOutcome, ItemTriesScore, ItemTry, ItemTryScore, PassFailureReason, READ_ALOUD_MAX_DIMENSION_WEIGHT, READ_ALOUD_MAX_REFERENCE_LENGTH, READ_ALOUD_MAX_SECONDS, READ_ALOUD_MAX_TAKES, ReadAloudWordAlignment, ReadAloudWordState, RoundingMode, SPEECH_ASSESSMENT_MAX_WORDS, ScoringOptions, SectionScore, SpeechAssessment, SpeechMeasurement, SpeechPhoneme, SpeechPhonemeCandidate, SpeechPlausibilityPolicy, SpeechSyllable, SpeechUnscorable, SpeechUnscorableCode, SpeechWord, SpeechWordError, WavInspection, WavInspectionPolicy, alignDictation, alignReadAloud, classifyBand, composeAssessmentScore, computePassThreshold, dictationReferenceWords, diffDictationChars, evaluate, evaluateTries, gradeReadAloud, gte, inspectWav, outcomeFromUnscorable, resolveItemScoringPolicy, roundGrade, score, scoreTries, validateItemScoringPolicy, validateSpeechAssessment } from './scoring.cjs';
|
|
5
|
+
import { a5 as SequenceSlot, a4 as SequenceEntry, I as ItemGroup, i as MediaProgress } from './index-CxxiNSSH.cjs';
|
|
6
|
+
export { A as AiPermissionsSchema, B as BlankConfigSchema, D as DictationDataSchema, a as DictationEquivalenceSchema, b as DictationSlowMediaSchema, c as DictationToleranceSchema, F as FeedbackSchema, d as FillInTheBlanksDataSchema, G as GapSelectBankSchema, e as GapSelectChoiceSchema, f as GapSelectDataSchema, g as GapSelectGapSchema, h as ItemGroupSchema, M as MediaPlaybackSchema, j as MediaSchema, k as MediaTimeline, l as MediaTimelineSchema, m as MediaTrackSchema, n as MediaUrlSchema, o as MultipleChoiceDataSchema, p as MultipleChoiceOptionMediaSchema, q as MultipleChoiceOptionSchema, N as NativeControlHintSchema, R as ReadAloudDataSchema, r as ReadAloudSlowMediaSchema, s as RedactedActivity, t as RedactedBlankConfig, u as RedactedBlankConfigSchema, v as RedactedDictationData, w as RedactedDictationDataSchema, x as RedactedDictationSlowMedia, y as RedactedDictationSlowMediaSchema, z as RedactedFillInTheBlanksData, C as RedactedFillInTheBlanksDataSchema, E as RedactedGapSelectBank, H as RedactedGapSelectBankSchema, J as RedactedGapSelectChoice, K as RedactedGapSelectChoiceSchema, L as RedactedGapSelectData, O as RedactedGapSelectDataSchema, P as RedactedGapSelectGap, Q as RedactedGapSelectGapSchema, S as RedactedItemGroupSchema, T as RedactedMediaSchema, U as RedactedMultipleChoiceData, V as RedactedMultipleChoiceDataSchema, W as RedactedMultipleChoiceOption, X as RedactedMultipleChoiceOptionMedia, Y as RedactedMultipleChoiceOptionMediaSchema, Z as RedactedMultipleChoiceOptionSchema, _ as RedactedReadAloudData, $ as RedactedReadAloudDataSchema, a0 as RedactedStimulus, a1 as RedactedStimulusSchema, a2 as RedactedWrittenResponseData, a3 as RedactedWrittenResponseDataSchema, a6 as SequenceSlotGroup, a7 as Stimulus, a8 as StimulusKind, a9 as StimulusSchema, aa as TextMatchPolicySchema, ab as TimelineChapter, ac as TimelineChapterSchema, ad as TimelineCue, ae as TimelineCueSchema, af as WrittenResponseDataSchema, ag as WrittenResponseRubricCriterionSchema, ah as WrittenResponseRubricSchema, ai as dictationJsonSchema, aj as fillInTheBlanksJsonSchema, ak as gapSelectJsonSchema, al as itemGroupJsonSchema, am as jsonSchemaFor, an as multipleChoiceJsonSchema, ao as readAloudJsonSchema, ap as stimulusJsonSchema, aq as validateActivity, ar as validateItemGroup, as as writtenResponseJsonSchema } from './index-CxxiNSSH.cjs';
|
|
7
7
|
import { z } from 'zod/v4';
|
|
8
8
|
export { AnsweredStatementParams, CompletedStatementParams, SubmittedStatementParams, XAPIObjectParams, XAPIStatementParams, XAPIVerb, XAPIVerbKey, XAPI_VERB_DISPLAY, validateXAPIStatement, xAPIBuilder, xapiDefinitionFor } from './xapi.cjs';
|
|
9
9
|
|
|
@@ -17,14 +17,18 @@ declare const AI_HINT_TYPES: readonly AiSupportedActivityType[];
|
|
|
17
17
|
/** The longest AI text shown, in code points. Longer is refused, not cut. */
|
|
18
18
|
declare const AI_TEXT_MAX_LENGTH = 2000;
|
|
19
19
|
/**
|
|
20
|
-
* Whether the SDK supports `feature` for this activity type
|
|
21
|
-
*
|
|
22
|
-
*
|
|
20
|
+
* Whether the SDK supports `feature` for this activity type: explanations and
|
|
21
|
+
* hints for the types it builds facts for, and writing feedback for a written
|
|
22
|
+
* response. A read-aloud, or a consumer's own type, has none.
|
|
23
23
|
*/
|
|
24
24
|
declare function aiSupports(activityType: string, feature: AiFeature): boolean;
|
|
25
25
|
/**
|
|
26
26
|
* Whether the item's author allows `feature`. Only an explicit `false`
|
|
27
27
|
* switches it off: an author can refuse a feature, never force one on.
|
|
28
|
+
*
|
|
29
|
+
* Writing feedback reads `explanations`: both are a model's words about the
|
|
30
|
+
* learner's own answer, and an author who switched one off has switched off
|
|
31
|
+
* the other.
|
|
28
32
|
*/
|
|
29
33
|
declare function aiAllowedByContent(data: AiActivityInput, feature: AiFeature): boolean;
|
|
30
34
|
/** A grade as an explanation must speak to it: all marks, some, or none. */
|
|
@@ -128,6 +132,59 @@ declare function checkAiHint(raw: unknown, request: AiHintRequest): {
|
|
|
128
132
|
*/
|
|
129
133
|
declare function hintRevealsAnswer(facts: AiItemFacts, hint: string): boolean;
|
|
130
134
|
|
|
135
|
+
/** The most corrections one piece of writing feedback may carry. More is refused, not cut. */
|
|
136
|
+
declare const AI_WRITING_MAX_CORRECTIONS = 20;
|
|
137
|
+
/** The longest quote, correction, explanation or criterion comment, in code points. */
|
|
138
|
+
declare const AI_WRITING_MAX_FIELD_LENGTH = 500;
|
|
139
|
+
/**
|
|
140
|
+
* The request for feedback on a draft, or `null` when there is none to give:
|
|
141
|
+
* not a written response, an author who switched explanations off (writing
|
|
142
|
+
* feedback reads `ai.explanations`), a redacted item — feedback is for
|
|
143
|
+
* practice, where the item is whole — or a draft with nothing in it.
|
|
144
|
+
*
|
|
145
|
+
* The facts are the task as the learner saw it, the draft verbatim with its
|
|
146
|
+
* word count recomputed as the grader will count it, and the rubric the answer
|
|
147
|
+
* will be graded on. `previousFeedback` is the text of the feedback already
|
|
148
|
+
* shown on earlier drafts, so a model can speak to what changed.
|
|
149
|
+
*/
|
|
150
|
+
declare function aiWritingFeedbackRequest(input: {
|
|
151
|
+
data: AiActivityInput;
|
|
152
|
+
response: LearnerResponse | null;
|
|
153
|
+
previousFeedback?: readonly string[];
|
|
154
|
+
learnerLocale?: string;
|
|
155
|
+
}): AiWritingFeedbackRequest | null;
|
|
156
|
+
/**
|
|
157
|
+
* Checks writing feedback a port returned for `request`, and turns it into what
|
|
158
|
+
* a learner is shown. The SDK shows a model's feedback whole or not at all: it
|
|
159
|
+
* never drops the part it doubts and shows the rest.
|
|
160
|
+
*
|
|
161
|
+
* - **The text** is read as every AI text is (`readAiTextResult`): plain text,
|
|
162
|
+
* not empty, at most {@link AI_TEXT_MAX_LENGTH} code points.
|
|
163
|
+
* - **Every correction must quote the draft** — the check only this SDK can run.
|
|
164
|
+
* The SDK finds each quote in the draft itself, typographic quotes and runs of
|
|
165
|
+
* whitespace aside, and anchors it there; a range the model claims must hold
|
|
166
|
+
* the quote. A correction of words the learner did not write refuses the
|
|
167
|
+
* whole reply as `misquotes-answer`, as a hint that gives the answer away
|
|
168
|
+
* refuses the hint. The `original` shown is the draft's own text at the range.
|
|
169
|
+
* At most {@link AI_WRITING_MAX_CORRECTIONS}; a correction that changes
|
|
170
|
+
* nothing is `malformed`.
|
|
171
|
+
* - **Criteria are judgements; the arithmetic is the SDK's.** Each names a
|
|
172
|
+
* criterion of the item's rubric, once; its score, when it has one, is a
|
|
173
|
+
* score out of its `maxScore`. The rubric's weights are attached, whatever
|
|
174
|
+
* the model sent. Anything else is `malformed`, as is any criterion on an
|
|
175
|
+
* item with no rubric.
|
|
176
|
+
* - **`indicativeScore`** is the rubric's weighted total, computed as
|
|
177
|
+
* `gradeFromRubric` computes a grade, when every criterion of the rubric was
|
|
178
|
+
* judged; `null` otherwise. An indication, never a grade.
|
|
179
|
+
*/
|
|
180
|
+
declare function checkAiWritingFeedback(raw: unknown, request: AiWritingFeedbackRequest): {
|
|
181
|
+
ok: true;
|
|
182
|
+
feedback: AiWritingFeedback;
|
|
183
|
+
} | {
|
|
184
|
+
ok: false;
|
|
185
|
+
refusal: AiRefusal;
|
|
186
|
+
};
|
|
187
|
+
|
|
131
188
|
/**
|
|
132
189
|
* How a paper is delivered: what a learner is shown around the questions, as
|
|
133
190
|
* the school running it decides — separately from the content, so that one
|
|
@@ -308,6 +365,13 @@ interface AttemptPlan {
|
|
|
308
365
|
* Absent when `planAttempt` was given none. Part of `planHash` when present.
|
|
309
366
|
*/
|
|
310
367
|
delivery?: ResolvedDeliveryPolicy;
|
|
368
|
+
/**
|
|
369
|
+
* The scoring policy the attempt was sat under, every setting spelled out:
|
|
370
|
+
* the tries each question gave, which counted, and what tries and hints
|
|
371
|
+
* cost. Absent when `planAttempt` was given none. Part of `planHash` when
|
|
372
|
+
* present.
|
|
373
|
+
*/
|
|
374
|
+
scoring?: ResolvedItemScoringPolicy;
|
|
311
375
|
slots: AttemptPlanSlot[];
|
|
312
376
|
/** Sum of every slot's `points`, frozen. The denominator of the paper. */
|
|
313
377
|
totalPoints: number;
|
|
@@ -348,6 +412,12 @@ interface AttemptPlanDrift {
|
|
|
348
412
|
* policy has exactly the shape it had before policies existed.
|
|
349
413
|
*/
|
|
350
414
|
deliveryChanged?: true;
|
|
415
|
+
/**
|
|
416
|
+
* The scoring policy differs: one plan records a policy the other does not,
|
|
417
|
+
* or a setting differs. The same answers are worth something else under
|
|
418
|
+
* another policy, so it breaks `matches`. Present only when it is `true`.
|
|
419
|
+
*/
|
|
420
|
+
scoringChanged?: true;
|
|
351
421
|
}
|
|
352
422
|
|
|
353
423
|
/** Options for {@link planAttempt}. */
|
|
@@ -386,6 +456,19 @@ interface PlanAttemptOptions<TItem> {
|
|
|
386
456
|
* record an appeal reads.
|
|
387
457
|
*/
|
|
388
458
|
delivery?: DeliveryPolicy | null;
|
|
459
|
+
/**
|
|
460
|
+
* The scoring policy this attempt is sat under — how many tries each
|
|
461
|
+
* question gives, which one counts, and what tries and hints cost. Frozen
|
|
462
|
+
* into the plan with every setting spelled out, like `delivery`, and for a
|
|
463
|
+
* stronger reason: every setting in it moves a grade, so a re-grade must
|
|
464
|
+
* apply the rules the learner sat under, not today's.
|
|
465
|
+
*
|
|
466
|
+
* Recorded only when given: a plan made without one is byte-identical to a
|
|
467
|
+
* plan made before scoring policies existed, `planHash` included.
|
|
468
|
+
*
|
|
469
|
+
* @throws Error when the policy does not pass `validateItemScoringPolicy`.
|
|
470
|
+
*/
|
|
471
|
+
scoring?: ItemScoringPolicy | null;
|
|
389
472
|
}
|
|
390
473
|
/**
|
|
391
474
|
* Freezes what an attempt is being served: the presented order, each slot's
|
|
@@ -1612,4 +1695,4 @@ interface ThemeTokens {
|
|
|
1612
1695
|
'--lk-transition-base': string;
|
|
1613
1696
|
}
|
|
1614
1697
|
|
|
1615
|
-
export { AI_EXPLANATION_TYPES, AI_HINT_TYPES, AI_TEXT_MAX_LENGTH, ActivityData, ActivityDataMap, ActivityMedia, ActivitySchemaError, ActivityType, type ActivityTypeAuthoring, type ActivityTypeDescriptor, type ActivityTypeInterop, type ActivityTypeScoring, AiActivityInput, AiExplanationRequest, AiFeature, AiGrade, AiHintRequest, AiItemFacts, AiRefusal, AiSupportedActivityType, AiTextResult, AssessmentScore, type AttemptPlan, type AttemptPlanDrift, type AttemptPlanSlot, type AttemptProgress, type AttemptState, CompositionPolicy, CriterionScore, DeferredScoringError, DeferredScoringPartial, type DeliveryPolicy, type DeliveryPolicyIssue, DictationData, DictationLearnerResponse, type DraftComplete, type DraftContext, type DraftIssue, type DraftNotComplete, type DraftSeverity, type DraftValidationResult, type FieldPolicy, FillInTheBlanksData, FillInTheBlanksLearnerResponse, type FlattenSequenceOptions, GapSelectData, GapSelectLearnerResponse, type GradeFromRubricOptions, GradeRecord, INTERACTIVE_VIDEO_ITEM_TYPES, type InteractiveVideoItemType, ItemGroup, ItemOutcome, LearnerResponse, type MediaBudgetRef, type MediaPlayClaim, type MediaPlayGrant, type MediaPlayLedger, type MediaPlayLedgerEntry, MediaProgress, type MissingOutcomePolicy, MultipleChoiceData, MultipleChoiceLearnerResponse, NativeControlHint, OPEN_DELIVERY_POLICY, type PartialScoringResult, type PlanAttemptOptions, type PlannableEntry, ReadAloudData, ReadAloudLearnerResponse, type RedactOptions, type RedactedActivityData, type RedactedItemGroup, RedactedScoringError, type RegisteredActivityTypeDescriptor, type ResolvedDeliveryPolicy, type ResolvedPlaybackPolicy, type ResponseDiffEntry, RoundingPolicy, ScoredItem, ScoringDetail, ScoringResult, type SeededShuffleOptions, type Sensitivity, SequenceEntry, SequenceSlot, type ShuffleVersion, TIMELINE_MAX_CHAPTERS, TIMELINE_MAX_ITEMS, TIMELINE_MAX_QUIZZES, TIMELINE_MAX_TITLE_LENGTH, type ThemeTokens, UnknownActivityTypeError, ValidationError, WrittenResponseData, WrittenResponseLearnerResponse, type XAPIInteractionType, aiAllowedByContent, aiExplanationRequest, aiGradeOf, aiHintRequest, aiSupports, assertRedacted, assertRedactedItemGroup, buildAiFacts, canonicalJson, checkAiExplanation, checkAiHint, combineDeliveryPolicies, composeTimelineScore, contentHash, countWords, createDraft, createInteractiveVideoDraft, createItemGroupDraft, defineActivityType, dictationType, diffResponses, entryKeyOf, fillInTheBlanksType, fingerprint, flattenSequence, gapSelectType, getActivityTypeDescriptor, gradeFromRubric, hasGrade, hashSeed, hintRevealsAnswer, isInteractiveVideoItemType, isItemGroup, multipleChoiceType, outcomeFromGrade, planAttempt, planMediaBudgets, readAiTextResult, readAloudType, readMediaProgress, redact, redactItemGroup, registerActivityType, registeredActivityTypes, resolveDeliveryPolicy, resolvePlaybackPolicy, restoreAttemptState, restoreMediaPlayLedger, scoredItemsFromPlan, seededShuffle, serializeAttemptState, serializeMediaPlayLedger, slotMediaKey, stimulusMediaKey, validateDeliveryPolicy, validateDraft, validateItemGroupDraft, verifyAttemptPlan, writtenResponseType };
|
|
1698
|
+
export { AI_EXPLANATION_TYPES, AI_HINT_TYPES, AI_TEXT_MAX_LENGTH, AI_WRITING_MAX_CORRECTIONS, AI_WRITING_MAX_FIELD_LENGTH, ActivityData, ActivityDataMap, ActivityMedia, ActivitySchemaError, ActivityType, type ActivityTypeAuthoring, type ActivityTypeDescriptor, type ActivityTypeInterop, type ActivityTypeScoring, AiActivityInput, AiExplanationRequest, AiFeature, AiGrade, AiHintRequest, AiItemFacts, AiRefusal, AiSupportedActivityType, AiTextResult, AiWritingFeedback, AiWritingFeedbackRequest, AssessmentScore, type AttemptPlan, type AttemptPlanDrift, type AttemptPlanSlot, type AttemptProgress, type AttemptState, CompositionPolicy, CriterionScore, DeferredScoringError, DeferredScoringPartial, type DeliveryPolicy, type DeliveryPolicyIssue, DictationData, DictationLearnerResponse, type DraftComplete, type DraftContext, type DraftIssue, type DraftNotComplete, type DraftSeverity, type DraftValidationResult, type FieldPolicy, FillInTheBlanksData, FillInTheBlanksLearnerResponse, type FlattenSequenceOptions, GapSelectData, GapSelectLearnerResponse, type GradeFromRubricOptions, GradeRecord, INTERACTIVE_VIDEO_ITEM_TYPES, type InteractiveVideoItemType, ItemGroup, ItemOutcome, ItemScoringPolicy, LearnerResponse, type MediaBudgetRef, type MediaPlayClaim, type MediaPlayGrant, type MediaPlayLedger, type MediaPlayLedgerEntry, MediaProgress, type MissingOutcomePolicy, MultipleChoiceData, MultipleChoiceLearnerResponse, NativeControlHint, OPEN_DELIVERY_POLICY, type PartialScoringResult, type PlanAttemptOptions, type PlannableEntry, ReadAloudData, ReadAloudLearnerResponse, type RedactOptions, type RedactedActivityData, type RedactedItemGroup, RedactedScoringError, type RegisteredActivityTypeDescriptor, type ResolvedDeliveryPolicy, ResolvedItemScoringPolicy, type ResolvedPlaybackPolicy, type ResponseDiffEntry, RoundingPolicy, ScoredItem, ScoringDetail, ScoringResult, type SeededShuffleOptions, type Sensitivity, SequenceEntry, SequenceSlot, type ShuffleVersion, TIMELINE_MAX_CHAPTERS, TIMELINE_MAX_ITEMS, TIMELINE_MAX_QUIZZES, TIMELINE_MAX_TITLE_LENGTH, type ThemeTokens, UnknownActivityTypeError, ValidationError, WrittenResponseData, WrittenResponseLearnerResponse, type XAPIInteractionType, aiAllowedByContent, aiExplanationRequest, aiGradeOf, aiHintRequest, aiSupports, aiWritingFeedbackRequest, assertRedacted, assertRedactedItemGroup, buildAiFacts, canonicalJson, checkAiExplanation, checkAiHint, checkAiWritingFeedback, combineDeliveryPolicies, composeTimelineScore, contentHash, countWords, createDraft, createInteractiveVideoDraft, createItemGroupDraft, defineActivityType, dictationType, diffResponses, entryKeyOf, fillInTheBlanksType, fingerprint, flattenSequence, gapSelectType, getActivityTypeDescriptor, gradeFromRubric, hasGrade, hashSeed, hintRevealsAnswer, isInteractiveVideoItemType, isItemGroup, multipleChoiceType, outcomeFromGrade, planAttempt, planMediaBudgets, readAiTextResult, readAloudType, readMediaProgress, redact, redactItemGroup, registerActivityType, registeredActivityTypes, resolveDeliveryPolicy, resolvePlaybackPolicy, restoreAttemptState, restoreMediaPlayLedger, scoredItemsFromPlan, seededShuffle, serializeAttemptState, serializeMediaPlayLedger, slotMediaKey, stimulusMediaKey, validateDeliveryPolicy, validateDraft, validateItemGroupDraft, verifyAttemptPlan, writtenResponseType };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { A as ActivityAiPermissions, c as ActivityFeedback, e as ActivityResult, h as AiBlankFact, i as AiDictationFacts,
|
|
3
|
-
import { ScoredItem, RoundingPolicy, CompositionPolicy, AssessmentScore } from './scoring.js';
|
|
4
|
-
export { AssessmentSectionInput, Band, DEFAULT_PASS_THRESHOLD, DICTATION_MAX_ACCEPTED_TRANSCRIPTS, DICTATION_MAX_EQUIVALENCES, DICTATION_MAX_EQUIVALENCE_LENGTH, DICTATION_MAX_TEXT_LENGTH, DICTATION_MAX_TRANSCRIPT_LENGTH, DictationAlignment, DictationCharOp, DictationReference, DictationWordAlignment, GradeReadAloudOptions, PassFailureReason, READ_ALOUD_MAX_DIMENSION_WEIGHT, READ_ALOUD_MAX_REFERENCE_LENGTH, READ_ALOUD_MAX_SECONDS, READ_ALOUD_MAX_TAKES, ReadAloudWordAlignment, ReadAloudWordState, RoundingMode, SPEECH_ASSESSMENT_MAX_WORDS, ScoringOptions, SectionScore, SpeechAssessment, SpeechMeasurement, SpeechPhoneme, SpeechPhonemeCandidate, SpeechPlausibilityPolicy, SpeechSyllable, SpeechUnscorable, SpeechUnscorableCode, SpeechWord, SpeechWordError, WavInspection, WavInspectionPolicy, alignDictation, alignReadAloud, classifyBand, composeAssessmentScore, computePassThreshold, dictationReferenceWords, diffDictationChars, evaluate, gradeReadAloud, gte, inspectWav, outcomeFromUnscorable, roundGrade, score, validateSpeechAssessment } from './scoring.js';
|
|
5
|
-
import { a5 as SequenceSlot, a4 as SequenceEntry, I as ItemGroup, i as MediaProgress } from './index-
|
|
6
|
-
export { A as AiPermissionsSchema, B as BlankConfigSchema, D as DictationDataSchema, a as DictationEquivalenceSchema, b as DictationSlowMediaSchema, c as DictationToleranceSchema, F as FeedbackSchema, d as FillInTheBlanksDataSchema, G as GapSelectBankSchema, e as GapSelectChoiceSchema, f as GapSelectDataSchema, g as GapSelectGapSchema, h as ItemGroupSchema, M as MediaPlaybackSchema, j as MediaSchema, k as MediaTimeline, l as MediaTimelineSchema, m as MediaTrackSchema, n as MediaUrlSchema, o as MultipleChoiceDataSchema, p as MultipleChoiceOptionMediaSchema, q as MultipleChoiceOptionSchema, N as NativeControlHintSchema, R as ReadAloudDataSchema, r as ReadAloudSlowMediaSchema, s as RedactedActivity, t as RedactedBlankConfig, u as RedactedBlankConfigSchema, v as RedactedDictationData, w as RedactedDictationDataSchema, x as RedactedDictationSlowMedia, y as RedactedDictationSlowMediaSchema, z as RedactedFillInTheBlanksData, C as RedactedFillInTheBlanksDataSchema, E as RedactedGapSelectBank, H as RedactedGapSelectBankSchema, J as RedactedGapSelectChoice, K as RedactedGapSelectChoiceSchema, L as RedactedGapSelectData, O as RedactedGapSelectDataSchema, P as RedactedGapSelectGap, Q as RedactedGapSelectGapSchema, S as RedactedItemGroupSchema, T as RedactedMediaSchema, U as RedactedMultipleChoiceData, V as RedactedMultipleChoiceDataSchema, W as RedactedMultipleChoiceOption, X as RedactedMultipleChoiceOptionMedia, Y as RedactedMultipleChoiceOptionMediaSchema, Z as RedactedMultipleChoiceOptionSchema, _ as RedactedReadAloudData, $ as RedactedReadAloudDataSchema, a0 as RedactedStimulus, a1 as RedactedStimulusSchema, a2 as RedactedWrittenResponseData, a3 as RedactedWrittenResponseDataSchema, a6 as SequenceSlotGroup, a7 as Stimulus, a8 as StimulusKind, a9 as StimulusSchema, aa as TextMatchPolicySchema, ab as TimelineChapter, ac as TimelineChapterSchema, ad as TimelineCue, ae as TimelineCueSchema, af as WrittenResponseDataSchema, ag as WrittenResponseRubricCriterionSchema, ah as WrittenResponseRubricSchema, ai as dictationJsonSchema, aj as fillInTheBlanksJsonSchema, ak as gapSelectJsonSchema, al as itemGroupJsonSchema, am as jsonSchemaFor, an as multipleChoiceJsonSchema, ao as readAloudJsonSchema, ap as stimulusJsonSchema, aq as validateActivity, ar as validateItemGroup, as as writtenResponseJsonSchema } from './index-
|
|
1
|
+
import { x as AiSupportedActivityType, g as AiActivityInput, l as AiFeature, a4 as LearnerResponse, a3 as ItemOutcome, k as AiExplanationRequest, p as AiGrade, q as AiHintRequest, ak as ScoringDetail, r as AiItemFacts, y as AiTextResult, v as AiRefusal, F as AiWritingFeedbackRequest, E as AiWritingFeedback, a as ActivityData, ap as ValidationError, f as ActivityType, b as ActivityDataMap, I as CriterionScore, X as GradeRecord, ac as NativeControlHint, d as ActivityMedia, am as ScoringResult, K as DeferredScoringPartial, L as DictationData, N as DictationLearnerResponse, Q as FillInTheBlanksData, R as FillInTheBlanksLearnerResponse, U as GapSelectData, W as GapSelectLearnerResponse, a8 as MultipleChoiceData, a9 as MultipleChoiceLearnerResponse, ad as ReadAloudData, ag as ReadAloudLearnerResponse, ar as WrittenResponseData, as as WrittenResponseLearnerResponse } from './activity-CYc7SD3d.js';
|
|
2
|
+
export { A as ActivityAiPermissions, c as ActivityFeedback, e as ActivityResult, h as AiBlankFact, i as AiCriterionJudgement, j as AiDictationFacts, m as AiFillInTheBlanksFacts, n as AiGapFact, o as AiGapSelectFacts, s as AiMultipleChoiceFacts, t as AiOptionFact, u as AiProvenance, w as AiRubricCriterionFact, z as AiVerdict, B as AiWordFact, C as AiWritingCorrection, D as AiWritingFacts, G as AiWritingFeedbackResult, H as BlankConfig, J as DeferredReason, M as DictationEquivalence, O as DictationSlowMedia, P as DictationTolerance, S as GapSelectBank, T as GapSelectChoice, V as GapSelectGap, Y as Grader, Z as GraderKind, _ as GraderUsage, $ as GradingState, a0 as InlineCorrection, a1 as InteractionEvent, a2 as InteractionKind, a5 as LearnerResponseMap, a6 as MediaPlaybackPolicy, a7 as MediaTrack, aa as MultipleChoiceOption, ab as MultipleChoiceOptionMedia, ae as ReadAloudDimension, af as ReadAloudDimensionWeight, ah as ReadAloudSlowMedia, ai as RecordingBounds, aj as RecordingRef, al as ScoringOutcome, an as TextMatchPolicy, ao as TextMatchResult, aq as ValidationResult, at as WrittenResponseRubric, au as WrittenResponseRubricCriterion, av as XAPIActor, aw as XAPIConfig, ax as XAPIContext, ay as XAPIContextActivities, az as XAPIError, aA as XAPIObject, aB as XAPIResult, aC as XAPIScore, aD as XAPIStatement, aE as XAPIVerbObject, aF as levenshteinDistance, aG as matchText } from './activity-CYc7SD3d.js';
|
|
3
|
+
import { ResolvedItemScoringPolicy, ItemScoringPolicy, ScoredItem, RoundingPolicy, CompositionPolicy, AssessmentScore } from './scoring.js';
|
|
4
|
+
export { AssessmentSectionInput, Band, DEFAULT_ITEM_SCORING_POLICY, DEFAULT_PASS_THRESHOLD, DICTATION_MAX_ACCEPTED_TRANSCRIPTS, DICTATION_MAX_EQUIVALENCES, DICTATION_MAX_EQUIVALENCE_LENGTH, DICTATION_MAX_TEXT_LENGTH, DICTATION_MAX_TRANSCRIPT_LENGTH, DictationAlignment, DictationCharOp, DictationReference, DictationWordAlignment, EvaluateOptions, GradeReadAloudOptions, ITEM_SCORING_MAX_RETRIES, ItemScoringCount, ItemScoringPolicyIssue, ItemTriesOutcome, ItemTriesScore, ItemTry, ItemTryScore, PassFailureReason, READ_ALOUD_MAX_DIMENSION_WEIGHT, READ_ALOUD_MAX_REFERENCE_LENGTH, READ_ALOUD_MAX_SECONDS, READ_ALOUD_MAX_TAKES, ReadAloudWordAlignment, ReadAloudWordState, RoundingMode, SPEECH_ASSESSMENT_MAX_WORDS, ScoringOptions, SectionScore, SpeechAssessment, SpeechMeasurement, SpeechPhoneme, SpeechPhonemeCandidate, SpeechPlausibilityPolicy, SpeechSyllable, SpeechUnscorable, SpeechUnscorableCode, SpeechWord, SpeechWordError, WavInspection, WavInspectionPolicy, alignDictation, alignReadAloud, classifyBand, composeAssessmentScore, computePassThreshold, dictationReferenceWords, diffDictationChars, evaluate, evaluateTries, gradeReadAloud, gte, inspectWav, outcomeFromUnscorable, resolveItemScoringPolicy, roundGrade, score, scoreTries, validateItemScoringPolicy, validateSpeechAssessment } from './scoring.js';
|
|
5
|
+
import { a5 as SequenceSlot, a4 as SequenceEntry, I as ItemGroup, i as MediaProgress } from './index-0Z3-nnAP.js';
|
|
6
|
+
export { A as AiPermissionsSchema, B as BlankConfigSchema, D as DictationDataSchema, a as DictationEquivalenceSchema, b as DictationSlowMediaSchema, c as DictationToleranceSchema, F as FeedbackSchema, d as FillInTheBlanksDataSchema, G as GapSelectBankSchema, e as GapSelectChoiceSchema, f as GapSelectDataSchema, g as GapSelectGapSchema, h as ItemGroupSchema, M as MediaPlaybackSchema, j as MediaSchema, k as MediaTimeline, l as MediaTimelineSchema, m as MediaTrackSchema, n as MediaUrlSchema, o as MultipleChoiceDataSchema, p as MultipleChoiceOptionMediaSchema, q as MultipleChoiceOptionSchema, N as NativeControlHintSchema, R as ReadAloudDataSchema, r as ReadAloudSlowMediaSchema, s as RedactedActivity, t as RedactedBlankConfig, u as RedactedBlankConfigSchema, v as RedactedDictationData, w as RedactedDictationDataSchema, x as RedactedDictationSlowMedia, y as RedactedDictationSlowMediaSchema, z as RedactedFillInTheBlanksData, C as RedactedFillInTheBlanksDataSchema, E as RedactedGapSelectBank, H as RedactedGapSelectBankSchema, J as RedactedGapSelectChoice, K as RedactedGapSelectChoiceSchema, L as RedactedGapSelectData, O as RedactedGapSelectDataSchema, P as RedactedGapSelectGap, Q as RedactedGapSelectGapSchema, S as RedactedItemGroupSchema, T as RedactedMediaSchema, U as RedactedMultipleChoiceData, V as RedactedMultipleChoiceDataSchema, W as RedactedMultipleChoiceOption, X as RedactedMultipleChoiceOptionMedia, Y as RedactedMultipleChoiceOptionMediaSchema, Z as RedactedMultipleChoiceOptionSchema, _ as RedactedReadAloudData, $ as RedactedReadAloudDataSchema, a0 as RedactedStimulus, a1 as RedactedStimulusSchema, a2 as RedactedWrittenResponseData, a3 as RedactedWrittenResponseDataSchema, a6 as SequenceSlotGroup, a7 as Stimulus, a8 as StimulusKind, a9 as StimulusSchema, aa as TextMatchPolicySchema, ab as TimelineChapter, ac as TimelineChapterSchema, ad as TimelineCue, ae as TimelineCueSchema, af as WrittenResponseDataSchema, ag as WrittenResponseRubricCriterionSchema, ah as WrittenResponseRubricSchema, ai as dictationJsonSchema, aj as fillInTheBlanksJsonSchema, ak as gapSelectJsonSchema, al as itemGroupJsonSchema, am as jsonSchemaFor, an as multipleChoiceJsonSchema, ao as readAloudJsonSchema, ap as stimulusJsonSchema, aq as validateActivity, ar as validateItemGroup, as as writtenResponseJsonSchema } from './index-0Z3-nnAP.js';
|
|
7
7
|
import { z } from 'zod/v4';
|
|
8
8
|
export { AnsweredStatementParams, CompletedStatementParams, SubmittedStatementParams, XAPIObjectParams, XAPIStatementParams, XAPIVerb, XAPIVerbKey, XAPI_VERB_DISPLAY, validateXAPIStatement, xAPIBuilder, xapiDefinitionFor } from './xapi.js';
|
|
9
9
|
|
|
@@ -17,14 +17,18 @@ declare const AI_HINT_TYPES: readonly AiSupportedActivityType[];
|
|
|
17
17
|
/** The longest AI text shown, in code points. Longer is refused, not cut. */
|
|
18
18
|
declare const AI_TEXT_MAX_LENGTH = 2000;
|
|
19
19
|
/**
|
|
20
|
-
* Whether the SDK supports `feature` for this activity type
|
|
21
|
-
*
|
|
22
|
-
*
|
|
20
|
+
* Whether the SDK supports `feature` for this activity type: explanations and
|
|
21
|
+
* hints for the types it builds facts for, and writing feedback for a written
|
|
22
|
+
* response. A read-aloud, or a consumer's own type, has none.
|
|
23
23
|
*/
|
|
24
24
|
declare function aiSupports(activityType: string, feature: AiFeature): boolean;
|
|
25
25
|
/**
|
|
26
26
|
* Whether the item's author allows `feature`. Only an explicit `false`
|
|
27
27
|
* switches it off: an author can refuse a feature, never force one on.
|
|
28
|
+
*
|
|
29
|
+
* Writing feedback reads `explanations`: both are a model's words about the
|
|
30
|
+
* learner's own answer, and an author who switched one off has switched off
|
|
31
|
+
* the other.
|
|
28
32
|
*/
|
|
29
33
|
declare function aiAllowedByContent(data: AiActivityInput, feature: AiFeature): boolean;
|
|
30
34
|
/** A grade as an explanation must speak to it: all marks, some, or none. */
|
|
@@ -128,6 +132,59 @@ declare function checkAiHint(raw: unknown, request: AiHintRequest): {
|
|
|
128
132
|
*/
|
|
129
133
|
declare function hintRevealsAnswer(facts: AiItemFacts, hint: string): boolean;
|
|
130
134
|
|
|
135
|
+
/** The most corrections one piece of writing feedback may carry. More is refused, not cut. */
|
|
136
|
+
declare const AI_WRITING_MAX_CORRECTIONS = 20;
|
|
137
|
+
/** The longest quote, correction, explanation or criterion comment, in code points. */
|
|
138
|
+
declare const AI_WRITING_MAX_FIELD_LENGTH = 500;
|
|
139
|
+
/**
|
|
140
|
+
* The request for feedback on a draft, or `null` when there is none to give:
|
|
141
|
+
* not a written response, an author who switched explanations off (writing
|
|
142
|
+
* feedback reads `ai.explanations`), a redacted item — feedback is for
|
|
143
|
+
* practice, where the item is whole — or a draft with nothing in it.
|
|
144
|
+
*
|
|
145
|
+
* The facts are the task as the learner saw it, the draft verbatim with its
|
|
146
|
+
* word count recomputed as the grader will count it, and the rubric the answer
|
|
147
|
+
* will be graded on. `previousFeedback` is the text of the feedback already
|
|
148
|
+
* shown on earlier drafts, so a model can speak to what changed.
|
|
149
|
+
*/
|
|
150
|
+
declare function aiWritingFeedbackRequest(input: {
|
|
151
|
+
data: AiActivityInput;
|
|
152
|
+
response: LearnerResponse | null;
|
|
153
|
+
previousFeedback?: readonly string[];
|
|
154
|
+
learnerLocale?: string;
|
|
155
|
+
}): AiWritingFeedbackRequest | null;
|
|
156
|
+
/**
|
|
157
|
+
* Checks writing feedback a port returned for `request`, and turns it into what
|
|
158
|
+
* a learner is shown. The SDK shows a model's feedback whole or not at all: it
|
|
159
|
+
* never drops the part it doubts and shows the rest.
|
|
160
|
+
*
|
|
161
|
+
* - **The text** is read as every AI text is (`readAiTextResult`): plain text,
|
|
162
|
+
* not empty, at most {@link AI_TEXT_MAX_LENGTH} code points.
|
|
163
|
+
* - **Every correction must quote the draft** — the check only this SDK can run.
|
|
164
|
+
* The SDK finds each quote in the draft itself, typographic quotes and runs of
|
|
165
|
+
* whitespace aside, and anchors it there; a range the model claims must hold
|
|
166
|
+
* the quote. A correction of words the learner did not write refuses the
|
|
167
|
+
* whole reply as `misquotes-answer`, as a hint that gives the answer away
|
|
168
|
+
* refuses the hint. The `original` shown is the draft's own text at the range.
|
|
169
|
+
* At most {@link AI_WRITING_MAX_CORRECTIONS}; a correction that changes
|
|
170
|
+
* nothing is `malformed`.
|
|
171
|
+
* - **Criteria are judgements; the arithmetic is the SDK's.** Each names a
|
|
172
|
+
* criterion of the item's rubric, once; its score, when it has one, is a
|
|
173
|
+
* score out of its `maxScore`. The rubric's weights are attached, whatever
|
|
174
|
+
* the model sent. Anything else is `malformed`, as is any criterion on an
|
|
175
|
+
* item with no rubric.
|
|
176
|
+
* - **`indicativeScore`** is the rubric's weighted total, computed as
|
|
177
|
+
* `gradeFromRubric` computes a grade, when every criterion of the rubric was
|
|
178
|
+
* judged; `null` otherwise. An indication, never a grade.
|
|
179
|
+
*/
|
|
180
|
+
declare function checkAiWritingFeedback(raw: unknown, request: AiWritingFeedbackRequest): {
|
|
181
|
+
ok: true;
|
|
182
|
+
feedback: AiWritingFeedback;
|
|
183
|
+
} | {
|
|
184
|
+
ok: false;
|
|
185
|
+
refusal: AiRefusal;
|
|
186
|
+
};
|
|
187
|
+
|
|
131
188
|
/**
|
|
132
189
|
* How a paper is delivered: what a learner is shown around the questions, as
|
|
133
190
|
* the school running it decides — separately from the content, so that one
|
|
@@ -308,6 +365,13 @@ interface AttemptPlan {
|
|
|
308
365
|
* Absent when `planAttempt` was given none. Part of `planHash` when present.
|
|
309
366
|
*/
|
|
310
367
|
delivery?: ResolvedDeliveryPolicy;
|
|
368
|
+
/**
|
|
369
|
+
* The scoring policy the attempt was sat under, every setting spelled out:
|
|
370
|
+
* the tries each question gave, which counted, and what tries and hints
|
|
371
|
+
* cost. Absent when `planAttempt` was given none. Part of `planHash` when
|
|
372
|
+
* present.
|
|
373
|
+
*/
|
|
374
|
+
scoring?: ResolvedItemScoringPolicy;
|
|
311
375
|
slots: AttemptPlanSlot[];
|
|
312
376
|
/** Sum of every slot's `points`, frozen. The denominator of the paper. */
|
|
313
377
|
totalPoints: number;
|
|
@@ -348,6 +412,12 @@ interface AttemptPlanDrift {
|
|
|
348
412
|
* policy has exactly the shape it had before policies existed.
|
|
349
413
|
*/
|
|
350
414
|
deliveryChanged?: true;
|
|
415
|
+
/**
|
|
416
|
+
* The scoring policy differs: one plan records a policy the other does not,
|
|
417
|
+
* or a setting differs. The same answers are worth something else under
|
|
418
|
+
* another policy, so it breaks `matches`. Present only when it is `true`.
|
|
419
|
+
*/
|
|
420
|
+
scoringChanged?: true;
|
|
351
421
|
}
|
|
352
422
|
|
|
353
423
|
/** Options for {@link planAttempt}. */
|
|
@@ -386,6 +456,19 @@ interface PlanAttemptOptions<TItem> {
|
|
|
386
456
|
* record an appeal reads.
|
|
387
457
|
*/
|
|
388
458
|
delivery?: DeliveryPolicy | null;
|
|
459
|
+
/**
|
|
460
|
+
* The scoring policy this attempt is sat under — how many tries each
|
|
461
|
+
* question gives, which one counts, and what tries and hints cost. Frozen
|
|
462
|
+
* into the plan with every setting spelled out, like `delivery`, and for a
|
|
463
|
+
* stronger reason: every setting in it moves a grade, so a re-grade must
|
|
464
|
+
* apply the rules the learner sat under, not today's.
|
|
465
|
+
*
|
|
466
|
+
* Recorded only when given: a plan made without one is byte-identical to a
|
|
467
|
+
* plan made before scoring policies existed, `planHash` included.
|
|
468
|
+
*
|
|
469
|
+
* @throws Error when the policy does not pass `validateItemScoringPolicy`.
|
|
470
|
+
*/
|
|
471
|
+
scoring?: ItemScoringPolicy | null;
|
|
389
472
|
}
|
|
390
473
|
/**
|
|
391
474
|
* Freezes what an attempt is being served: the presented order, each slot's
|
|
@@ -1612,4 +1695,4 @@ interface ThemeTokens {
|
|
|
1612
1695
|
'--lk-transition-base': string;
|
|
1613
1696
|
}
|
|
1614
1697
|
|
|
1615
|
-
export { AI_EXPLANATION_TYPES, AI_HINT_TYPES, AI_TEXT_MAX_LENGTH, ActivityData, ActivityDataMap, ActivityMedia, ActivitySchemaError, ActivityType, type ActivityTypeAuthoring, type ActivityTypeDescriptor, type ActivityTypeInterop, type ActivityTypeScoring, AiActivityInput, AiExplanationRequest, AiFeature, AiGrade, AiHintRequest, AiItemFacts, AiRefusal, AiSupportedActivityType, AiTextResult, AssessmentScore, type AttemptPlan, type AttemptPlanDrift, type AttemptPlanSlot, type AttemptProgress, type AttemptState, CompositionPolicy, CriterionScore, DeferredScoringError, DeferredScoringPartial, type DeliveryPolicy, type DeliveryPolicyIssue, DictationData, DictationLearnerResponse, type DraftComplete, type DraftContext, type DraftIssue, type DraftNotComplete, type DraftSeverity, type DraftValidationResult, type FieldPolicy, FillInTheBlanksData, FillInTheBlanksLearnerResponse, type FlattenSequenceOptions, GapSelectData, GapSelectLearnerResponse, type GradeFromRubricOptions, GradeRecord, INTERACTIVE_VIDEO_ITEM_TYPES, type InteractiveVideoItemType, ItemGroup, ItemOutcome, LearnerResponse, type MediaBudgetRef, type MediaPlayClaim, type MediaPlayGrant, type MediaPlayLedger, type MediaPlayLedgerEntry, MediaProgress, type MissingOutcomePolicy, MultipleChoiceData, MultipleChoiceLearnerResponse, NativeControlHint, OPEN_DELIVERY_POLICY, type PartialScoringResult, type PlanAttemptOptions, type PlannableEntry, ReadAloudData, ReadAloudLearnerResponse, type RedactOptions, type RedactedActivityData, type RedactedItemGroup, RedactedScoringError, type RegisteredActivityTypeDescriptor, type ResolvedDeliveryPolicy, type ResolvedPlaybackPolicy, type ResponseDiffEntry, RoundingPolicy, ScoredItem, ScoringDetail, ScoringResult, type SeededShuffleOptions, type Sensitivity, SequenceEntry, SequenceSlot, type ShuffleVersion, TIMELINE_MAX_CHAPTERS, TIMELINE_MAX_ITEMS, TIMELINE_MAX_QUIZZES, TIMELINE_MAX_TITLE_LENGTH, type ThemeTokens, UnknownActivityTypeError, ValidationError, WrittenResponseData, WrittenResponseLearnerResponse, type XAPIInteractionType, aiAllowedByContent, aiExplanationRequest, aiGradeOf, aiHintRequest, aiSupports, assertRedacted, assertRedactedItemGroup, buildAiFacts, canonicalJson, checkAiExplanation, checkAiHint, combineDeliveryPolicies, composeTimelineScore, contentHash, countWords, createDraft, createInteractiveVideoDraft, createItemGroupDraft, defineActivityType, dictationType, diffResponses, entryKeyOf, fillInTheBlanksType, fingerprint, flattenSequence, gapSelectType, getActivityTypeDescriptor, gradeFromRubric, hasGrade, hashSeed, hintRevealsAnswer, isInteractiveVideoItemType, isItemGroup, multipleChoiceType, outcomeFromGrade, planAttempt, planMediaBudgets, readAiTextResult, readAloudType, readMediaProgress, redact, redactItemGroup, registerActivityType, registeredActivityTypes, resolveDeliveryPolicy, resolvePlaybackPolicy, restoreAttemptState, restoreMediaPlayLedger, scoredItemsFromPlan, seededShuffle, serializeAttemptState, serializeMediaPlayLedger, slotMediaKey, stimulusMediaKey, validateDeliveryPolicy, validateDraft, validateItemGroupDraft, verifyAttemptPlan, writtenResponseType };
|
|
1698
|
+
export { AI_EXPLANATION_TYPES, AI_HINT_TYPES, AI_TEXT_MAX_LENGTH, AI_WRITING_MAX_CORRECTIONS, AI_WRITING_MAX_FIELD_LENGTH, ActivityData, ActivityDataMap, ActivityMedia, ActivitySchemaError, ActivityType, type ActivityTypeAuthoring, type ActivityTypeDescriptor, type ActivityTypeInterop, type ActivityTypeScoring, AiActivityInput, AiExplanationRequest, AiFeature, AiGrade, AiHintRequest, AiItemFacts, AiRefusal, AiSupportedActivityType, AiTextResult, AiWritingFeedback, AiWritingFeedbackRequest, AssessmentScore, type AttemptPlan, type AttemptPlanDrift, type AttemptPlanSlot, type AttemptProgress, type AttemptState, CompositionPolicy, CriterionScore, DeferredScoringError, DeferredScoringPartial, type DeliveryPolicy, type DeliveryPolicyIssue, DictationData, DictationLearnerResponse, type DraftComplete, type DraftContext, type DraftIssue, type DraftNotComplete, type DraftSeverity, type DraftValidationResult, type FieldPolicy, FillInTheBlanksData, FillInTheBlanksLearnerResponse, type FlattenSequenceOptions, GapSelectData, GapSelectLearnerResponse, type GradeFromRubricOptions, GradeRecord, INTERACTIVE_VIDEO_ITEM_TYPES, type InteractiveVideoItemType, ItemGroup, ItemOutcome, ItemScoringPolicy, LearnerResponse, type MediaBudgetRef, type MediaPlayClaim, type MediaPlayGrant, type MediaPlayLedger, type MediaPlayLedgerEntry, MediaProgress, type MissingOutcomePolicy, MultipleChoiceData, MultipleChoiceLearnerResponse, NativeControlHint, OPEN_DELIVERY_POLICY, type PartialScoringResult, type PlanAttemptOptions, type PlannableEntry, ReadAloudData, ReadAloudLearnerResponse, type RedactOptions, type RedactedActivityData, type RedactedItemGroup, RedactedScoringError, type RegisteredActivityTypeDescriptor, type ResolvedDeliveryPolicy, ResolvedItemScoringPolicy, type ResolvedPlaybackPolicy, type ResponseDiffEntry, RoundingPolicy, ScoredItem, ScoringDetail, ScoringResult, type SeededShuffleOptions, type Sensitivity, SequenceEntry, SequenceSlot, type ShuffleVersion, TIMELINE_MAX_CHAPTERS, TIMELINE_MAX_ITEMS, TIMELINE_MAX_QUIZZES, TIMELINE_MAX_TITLE_LENGTH, type ThemeTokens, UnknownActivityTypeError, ValidationError, WrittenResponseData, WrittenResponseLearnerResponse, type XAPIInteractionType, aiAllowedByContent, aiExplanationRequest, aiGradeOf, aiHintRequest, aiSupports, aiWritingFeedbackRequest, assertRedacted, assertRedactedItemGroup, buildAiFacts, canonicalJson, checkAiExplanation, checkAiHint, checkAiWritingFeedback, combineDeliveryPolicies, composeTimelineScore, contentHash, countWords, createDraft, createInteractiveVideoDraft, createItemGroupDraft, defineActivityType, dictationType, diffResponses, entryKeyOf, fillInTheBlanksType, fingerprint, flattenSequence, gapSelectType, getActivityTypeDescriptor, gradeFromRubric, hasGrade, hashSeed, hintRevealsAnswer, isInteractiveVideoItemType, isItemGroup, multipleChoiceType, outcomeFromGrade, planAttempt, planMediaBudgets, readAiTextResult, readAloudType, readMediaProgress, redact, redactItemGroup, registerActivityType, registeredActivityTypes, resolveDeliveryPolicy, resolvePlaybackPolicy, restoreAttemptState, restoreMediaPlayLedger, scoredItemsFromPlan, seededShuffle, serializeAttemptState, serializeMediaPlayLedger, slotMediaKey, stimulusMediaKey, validateDeliveryPolicy, validateDraft, validateItemGroupDraft, verifyAttemptPlan, writtenResponseType };
|
package/dist/index.js
CHANGED
|
@@ -35,25 +35,32 @@ import {
|
|
|
35
35
|
AI_EXPLANATION_TYPES,
|
|
36
36
|
AI_HINT_TYPES,
|
|
37
37
|
AI_TEXT_MAX_LENGTH,
|
|
38
|
+
AI_WRITING_MAX_CORRECTIONS,
|
|
39
|
+
AI_WRITING_MAX_FIELD_LENGTH,
|
|
38
40
|
aiAllowedByContent,
|
|
39
41
|
aiExplanationRequest,
|
|
40
42
|
aiGradeOf,
|
|
41
43
|
aiHintRequest,
|
|
42
44
|
aiSupports,
|
|
45
|
+
aiWritingFeedbackRequest,
|
|
43
46
|
buildAiFacts,
|
|
44
47
|
checkAiExplanation,
|
|
45
48
|
checkAiHint,
|
|
49
|
+
checkAiWritingFeedback,
|
|
46
50
|
hintRevealsAnswer,
|
|
47
51
|
readAiTextResult
|
|
48
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-5UCR4UNR.js";
|
|
49
53
|
import {
|
|
54
|
+
DEFAULT_ITEM_SCORING_POLICY,
|
|
50
55
|
DEFAULT_PASS_THRESHOLD,
|
|
56
|
+
ITEM_SCORING_MAX_RETRIES,
|
|
51
57
|
alignReadAloud,
|
|
52
58
|
classifyBand,
|
|
53
59
|
composeAssessmentScore,
|
|
54
60
|
computePassThreshold,
|
|
55
61
|
diffDictationChars,
|
|
56
62
|
evaluate,
|
|
63
|
+
evaluateTries,
|
|
57
64
|
gradeFromRubric,
|
|
58
65
|
gradeReadAloud,
|
|
59
66
|
gte,
|
|
@@ -61,10 +68,13 @@ import {
|
|
|
61
68
|
inspectWav,
|
|
62
69
|
outcomeFromGrade,
|
|
63
70
|
outcomeFromUnscorable,
|
|
71
|
+
resolveItemScoringPolicy,
|
|
64
72
|
roundGrade,
|
|
65
73
|
score,
|
|
74
|
+
scoreTries,
|
|
75
|
+
validateItemScoringPolicy,
|
|
66
76
|
validateSpeechAssessment
|
|
67
|
-
} from "./chunk-
|
|
77
|
+
} from "./chunk-Q7MV3IXJ.js";
|
|
68
78
|
import {
|
|
69
79
|
ActivitySchemaError,
|
|
70
80
|
AiPermissionsSchema,
|
|
@@ -612,6 +622,7 @@ function planSlot(slot, points) {
|
|
|
612
622
|
function planAttempt(entries, options = {}) {
|
|
613
623
|
const { seed, shuffleEntries, points } = options;
|
|
614
624
|
const delivery = frozenDelivery(options.delivery);
|
|
625
|
+
const scoring = frozenScoring(options.scoring);
|
|
615
626
|
const slots = flattenSequence(entries, {
|
|
616
627
|
...shuffleEntries !== void 0 ? { shuffleEntries } : {},
|
|
617
628
|
...seed !== void 0 ? { seed } : {}
|
|
@@ -629,8 +640,19 @@ function planAttempt(entries, options = {}) {
|
|
|
629
640
|
// A policy joins it when there is one: the same paper sat with hints and
|
|
630
641
|
// without is two different attempts. Without one, the fingerprint is the
|
|
631
642
|
// one every plan before policies had.
|
|
632
|
-
|
|
643
|
+
// So does a scoring policy: the same answers are worth something else when
|
|
644
|
+
// a hint costs a tenth of the marks. Each joins only when it is there, so
|
|
645
|
+
// a plan with neither — or with a delivery policy alone — keeps the
|
|
646
|
+
// fingerprint it always had.
|
|
647
|
+
planHash: contentHash(
|
|
648
|
+
delivery === void 0 && scoring === void 0 ? planned : {
|
|
649
|
+
slots: planned,
|
|
650
|
+
...delivery !== void 0 ? { delivery } : {},
|
|
651
|
+
...scoring !== void 0 ? { scoring } : {}
|
|
652
|
+
}
|
|
653
|
+
),
|
|
633
654
|
...delivery !== void 0 ? { delivery } : {},
|
|
655
|
+
...scoring !== void 0 ? { scoring } : {},
|
|
634
656
|
slots: planned,
|
|
635
657
|
totalPoints
|
|
636
658
|
};
|
|
@@ -646,6 +668,7 @@ function verifyAttemptPlan(plan, current) {
|
|
|
646
668
|
const changedPointsSlotIds = [];
|
|
647
669
|
const reorderedSlotIds = [];
|
|
648
670
|
const deliveryChanged = contentHash(plan.delivery ?? null) !== contentHash(current.delivery ?? null);
|
|
671
|
+
const scoringChanged = contentHash(plan.scoring ?? null) !== contentHash(current.scoring ?? null);
|
|
649
672
|
for (const slot of plan.slots) {
|
|
650
673
|
const now = after.get(slot.slotId);
|
|
651
674
|
if (now === void 0) {
|
|
@@ -668,7 +691,7 @@ function verifyAttemptPlan(plan, current) {
|
|
|
668
691
|
}
|
|
669
692
|
}
|
|
670
693
|
return {
|
|
671
|
-
matches: missingSlotIds.length === 0 && addedSlotIds.length === 0 && changedSlotIds.length === 0 && changedStimulusSlotIds.length === 0 && changedCueSlotIds.length === 0 && changedPointsSlotIds.length === 0 && reorderedSlotIds.length === 0 && !deliveryChanged,
|
|
694
|
+
matches: missingSlotIds.length === 0 && addedSlotIds.length === 0 && changedSlotIds.length === 0 && changedStimulusSlotIds.length === 0 && changedCueSlotIds.length === 0 && changedPointsSlotIds.length === 0 && reorderedSlotIds.length === 0 && !deliveryChanged && !scoringChanged,
|
|
672
695
|
missingSlotIds,
|
|
673
696
|
addedSlotIds,
|
|
674
697
|
changedSlotIds,
|
|
@@ -679,7 +702,8 @@ function verifyAttemptPlan(plan, current) {
|
|
|
679
702
|
// Present only when it is true, as `rejectedSlotIds` is on a composed
|
|
680
703
|
// score: a drift report between two plans without a policy — every one
|
|
681
704
|
// written before policies existed — keeps exactly the shape it had.
|
|
682
|
-
...deliveryChanged ? { deliveryChanged: true } : {}
|
|
705
|
+
...deliveryChanged ? { deliveryChanged: true } : {},
|
|
706
|
+
...scoringChanged ? { scoringChanged: true } : {}
|
|
683
707
|
};
|
|
684
708
|
}
|
|
685
709
|
function frozenDelivery(policy) {
|
|
@@ -695,6 +719,19 @@ function frozenDelivery(policy) {
|
|
|
695
719
|
}
|
|
696
720
|
return resolveDeliveryPolicy(checked.data);
|
|
697
721
|
}
|
|
722
|
+
function frozenScoring(policy) {
|
|
723
|
+
if (policy === void 0 || policy === null) {
|
|
724
|
+
return void 0;
|
|
725
|
+
}
|
|
726
|
+
const checked = validateItemScoringPolicy(policy);
|
|
727
|
+
if (!checked.success) {
|
|
728
|
+
const first = checked.issues[0];
|
|
729
|
+
throw new Error(
|
|
730
|
+
`planAttempt: the scoring policy is not one to record \u2014 ${first?.message ?? "invalid"}` + (checked.issues.length > 1 ? ` (and ${checked.issues.length - 1} more)` : "")
|
|
731
|
+
);
|
|
732
|
+
}
|
|
733
|
+
return resolveItemScoringPolicy(checked.data);
|
|
734
|
+
}
|
|
698
735
|
function missingOutcome(slot, policy) {
|
|
699
736
|
if (typeof policy === "function") {
|
|
700
737
|
return policy(slot);
|
|
@@ -1629,9 +1666,12 @@ export {
|
|
|
1629
1666
|
AI_EXPLANATION_TYPES,
|
|
1630
1667
|
AI_HINT_TYPES,
|
|
1631
1668
|
AI_TEXT_MAX_LENGTH,
|
|
1669
|
+
AI_WRITING_MAX_CORRECTIONS,
|
|
1670
|
+
AI_WRITING_MAX_FIELD_LENGTH,
|
|
1632
1671
|
ActivitySchemaError,
|
|
1633
1672
|
AiPermissionsSchema,
|
|
1634
1673
|
BlankConfigSchema,
|
|
1674
|
+
DEFAULT_ITEM_SCORING_POLICY,
|
|
1635
1675
|
DEFAULT_PASS_THRESHOLD,
|
|
1636
1676
|
DICTATION_MAX_ACCEPTED_TRANSCRIPTS,
|
|
1637
1677
|
DICTATION_MAX_EQUIVALENCES,
|
|
@@ -1650,6 +1690,7 @@ export {
|
|
|
1650
1690
|
GapSelectDataSchema,
|
|
1651
1691
|
GapSelectGapSchema,
|
|
1652
1692
|
INTERACTIVE_VIDEO_ITEM_TYPES,
|
|
1693
|
+
ITEM_SCORING_MAX_RETRIES,
|
|
1653
1694
|
ItemGroupSchema,
|
|
1654
1695
|
MediaPlaybackSchema,
|
|
1655
1696
|
MediaSchema,
|
|
@@ -1704,6 +1745,7 @@ export {
|
|
|
1704
1745
|
aiGradeOf,
|
|
1705
1746
|
aiHintRequest,
|
|
1706
1747
|
aiSupports,
|
|
1748
|
+
aiWritingFeedbackRequest,
|
|
1707
1749
|
alignDictation,
|
|
1708
1750
|
alignReadAloud,
|
|
1709
1751
|
assertRedacted,
|
|
@@ -1712,6 +1754,7 @@ export {
|
|
|
1712
1754
|
canonicalJson,
|
|
1713
1755
|
checkAiExplanation,
|
|
1714
1756
|
checkAiHint,
|
|
1757
|
+
checkAiWritingFeedback,
|
|
1715
1758
|
classifyBand,
|
|
1716
1759
|
combineDeliveryPolicies,
|
|
1717
1760
|
composeAssessmentScore,
|
|
@@ -1730,6 +1773,7 @@ export {
|
|
|
1730
1773
|
diffResponses,
|
|
1731
1774
|
entryKeyOf,
|
|
1732
1775
|
evaluate,
|
|
1776
|
+
evaluateTries,
|
|
1733
1777
|
fillInTheBlanksJsonSchema,
|
|
1734
1778
|
fillInTheBlanksType,
|
|
1735
1779
|
fingerprint,
|
|
@@ -1765,11 +1809,13 @@ export {
|
|
|
1765
1809
|
registerActivityType,
|
|
1766
1810
|
registeredActivityTypes,
|
|
1767
1811
|
resolveDeliveryPolicy,
|
|
1812
|
+
resolveItemScoringPolicy,
|
|
1768
1813
|
resolvePlaybackPolicy,
|
|
1769
1814
|
restoreAttemptState,
|
|
1770
1815
|
restoreMediaPlayLedger,
|
|
1771
1816
|
roundGrade,
|
|
1772
1817
|
score,
|
|
1818
|
+
scoreTries,
|
|
1773
1819
|
scoredItemsFromPlan,
|
|
1774
1820
|
seededShuffle,
|
|
1775
1821
|
serializeAttemptState,
|
|
@@ -1782,6 +1828,7 @@ export {
|
|
|
1782
1828
|
validateDraft,
|
|
1783
1829
|
validateItemGroup,
|
|
1784
1830
|
validateItemGroupDraft,
|
|
1831
|
+
validateItemScoringPolicy,
|
|
1785
1832
|
validateSpeechAssessment,
|
|
1786
1833
|
validateXAPIStatement,
|
|
1787
1834
|
verifyAttemptPlan,
|