@intellectif/lk-core 1.3.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.
- package/CHANGELOG.md +59 -0
- package/README.md +2 -0
- package/dist/{ai-B222dtHH.d.ts → ai-BYryFkF9.d.cts} +462 -5
- package/dist/ai-BYryFkF9.d.cts.map +1 -0
- package/dist/{ai-B222dtHH.d.cts → ai-BYryFkF9.d.ts} +462 -5
- package/dist/ai-BYryFkF9.d.ts.map +1 -0
- package/dist/ai-check.cjs +274 -23
- package/dist/ai-check.cjs.map +1 -1
- package/dist/ai-check.d.cts +13 -5
- package/dist/ai-check.d.cts.map +1 -1
- package/dist/ai-check.d.ts +13 -5
- package/dist/ai-check.d.ts.map +1 -1
- package/dist/ai-check.js +274 -23
- package/dist/ai-check.js.map +1 -1
- package/dist/{ai-writing-DCVkv4Zj.cjs → ai-writing-Cen7-3qs.cjs} +520 -58
- package/dist/ai-writing-Cen7-3qs.cjs.map +1 -0
- package/dist/{ai-writing-CCBjTOM3.js → ai-writing-D8PdhJJz.js} +513 -75
- package/dist/ai-writing-D8PdhJJz.js.map +1 -0
- package/dist/{index-Dyu66R4-.d.cts → index-Bg0aeWtM.d.cts} +327 -3
- package/dist/index-Bg0aeWtM.d.cts.map +1 -0
- package/dist/{index-BWPRPIXL.d.ts → index-CxpiWedW.d.ts} +7 -217
- package/dist/index-CxpiWedW.d.ts.map +1 -0
- package/dist/{index-CXyOV8sm.d.cts → index-D7R3Ll8R.d.cts} +2 -2
- package/dist/{index-CXyOV8sm.d.cts.map → index-D7R3Ll8R.d.cts.map} +1 -1
- package/dist/{index-UGxRSopE.d.ts → index-DUaW1Tj5.d.ts} +327 -3
- package/dist/index-DUaW1Tj5.d.ts.map +1 -0
- package/dist/{index-O4_ExlAD.d.cts → index-qMbxed1B.d.cts} +7 -217
- package/dist/index-qMbxed1B.d.cts.map +1 -0
- package/dist/{index-CegM8o15.d.ts → index-wMc1E_aM.d.ts} +2 -2
- package/dist/{index-CegM8o15.d.ts.map → index-wMc1E_aM.d.ts.map} +1 -1
- package/dist/index.cjs +32 -130
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +115 -97
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +115 -97
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -117
- package/dist/index.js.map +1 -1
- package/dist/{item-group-DroFXgLb.cjs → item-group-DEB7nLID.cjs} +2 -2
- package/dist/{item-group-DroFXgLb.cjs.map → item-group-DEB7nLID.cjs.map} +1 -1
- package/dist/{item-group-DXiR8nOr.js → item-group-DdSUCUjM.js} +2 -2
- package/dist/{item-group-DXiR8nOr.js.map → item-group-DdSUCUjM.js.map} +1 -1
- package/dist/{registry-DVi0LR_i.cjs → registry-Ce00A_OW.cjs} +184 -4
- package/dist/registry-Ce00A_OW.cjs.map +1 -0
- package/dist/{registry-Dsx9mNsS.js → registry-DaZRpqjW.js} +155 -5
- package/dist/registry-DaZRpqjW.js.map +1 -0
- package/dist/{schemas-Bdw0nGPo.js → schemas-BioKFf3F.js} +3 -3
- package/dist/{schemas-Bdw0nGPo.js.map → schemas-BioKFf3F.js.map} +1 -1
- package/dist/{schemas-DVbAOrtd.cjs → schemas-DksueYsu.cjs} +3 -3
- package/dist/{schemas-DVbAOrtd.cjs.map → schemas-DksueYsu.cjs.map} +1 -1
- package/dist/schemas.cjs +2 -2
- package/dist/schemas.d.cts +1 -1
- package/dist/schemas.d.ts +1 -1
- package/dist/schemas.js +2 -2
- package/dist/{scoring-BZqUkuDF.js → scoring-BKNNTz-s.js} +657 -3
- package/dist/scoring-BKNNTz-s.js.map +1 -0
- package/dist/{scoring-B2_HEhMT.cjs → scoring-lKQVYsxy.cjs} +722 -2
- package/dist/scoring-lKQVYsxy.cjs.map +1 -0
- package/dist/scoring.cjs +8 -2
- package/dist/scoring.d.cts +3 -3
- package/dist/scoring.d.ts +3 -3
- package/dist/scoring.js +3 -3
- package/dist/{xapi-DNzkSJ0S.cjs → xapi-NYrTlpID.cjs} +2 -2
- package/dist/{xapi-DNzkSJ0S.cjs.map → xapi-NYrTlpID.cjs.map} +1 -1
- package/dist/{xapi-CMTph7wG.js → xapi-wR6gu4qS.js} +2 -2
- package/dist/{xapi-CMTph7wG.js.map → xapi-wR6gu4qS.js.map} +1 -1
- package/dist/xapi.cjs +1 -1
- package/dist/xapi.d.cts +1 -1
- package/dist/xapi.d.ts +1 -1
- package/dist/xapi.js +1 -2
- package/package.json +2 -2
- package/vectors/README.md +24 -1
- package/vectors/scoring.json +18182 -1
- package/dist/ai-B222dtHH.d.cts.map +0 -1
- package/dist/ai-B222dtHH.d.ts.map +0 -1
- package/dist/ai-writing-CCBjTOM3.js.map +0 -1
- package/dist/ai-writing-DCVkv4Zj.cjs.map +0 -1
- package/dist/index-BWPRPIXL.d.ts.map +0 -1
- package/dist/index-Dyu66R4-.d.cts.map +0 -1
- package/dist/index-O4_ExlAD.d.cts.map +0 -1
- package/dist/index-UGxRSopE.d.ts.map +0 -1
- package/dist/registry-DVi0LR_i.cjs.map +0 -1
- package/dist/registry-Dsx9mNsS.js.map +0 -1
- package/dist/scoring-B2_HEhMT.cjs.map +0 -1
- package/dist/scoring-BZqUkuDF.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,22 @@
|
|
|
1
|
-
import { $ as
|
|
2
|
-
import { $ as
|
|
3
|
-
import {
|
|
4
|
-
import { a as XAPIObjectParams, c as xapiDefinitionFor, d as XAPI_VERB_DISPLAY, i as SubmittedStatementParams, l as XAPIVerb, n as AnsweredStatementParams, o as XAPIStatementParams, r as CompletedStatementParams, s as xAPIBuilder, t as validateXAPIStatement, u as XAPIVerbKey } from "./index-
|
|
1
|
+
import { $ as AiVerdict, $t as MultipleChoiceData, A as AiGapSelectFacts, An as XAPIVerbObject, At as ActivityType, B as AiHintRequest, Bn as InlineCorrection, Bt as FillInTheBlanksLearnerResponse, C as AiDraftsCall, Cn as XAPIContext, Ct as ItemFinding, D as AiFeature, Dn as XAPIResult, Dt as ActivityFeedback, E as AiExplanationRequest, En as XAPIObject, Et as ActivityDataMap, F as AiGradingFacts, Fn as Grader, Ft as DictationEquivalence, G as AiProvenance, Gt as GapSelectLearnerResponse, H as AiMaterialFacts, Hn as TextMatchResult, Ht as GapSelectChoice, I as AiGradingJudgement, In as GraderConfiguration, It as DictationLearnerResponse, J as AiRefusal, Jt as ItemOutcome, K as AiReadingFacts, Kt as InteractionEvent, L as AiGradingRequest, Ln as GraderKind, Lt as DictationSlowMedia, M as AiGrade, Mn as GradeRecord, Mt as DeferredReason, N as AiGradedCriterion, Nn as GradeRouting, Nt as DeferredScoringPartial, O as AiFillInTheBlanksFacts, On as XAPIScore, Ot as ActivityMedia, P as AiGradingCriterionFact, Pn as GradeRoutingReason, Pt as DictationData, Q as AiTextResult, Qt as MediaTrack, R as AiGradingRequestProblem, Rn as GraderUsage, Rt as DictationTolerance, S as AiDrafts, Sn as XAPIConfig, St as DraftValidationResult, T as AiDraftsRun, Tn as XAPIError, Tt as ActivityData, U as AiMultipleChoiceFacts, Un as levenshteinDistance, Ut as GapSelectData, V as AiItemFacts, Vn as TextMatchPolicy, Vt as GapSelectBank, W as AiOptionFact, Wn as matchText, Wt as GapSelectGap, X as AiSoundFact, Xt as LearnerResponseMap, Y as AiRubricCriterionFact, Yt as LearnerResponse, Z as AiSupportedActivityType, Zt as MediaPlaybackPolicy, _ as AiDraftCaption, _n as WrittenResponseLearnerResponse, _t as DraftComplete, a as AiCoachingRequest, an as ReadAloudDimension, at as AiWritingFeedbackRequest, b as AiDraftSource, bn as WrittenResponseRubricLevel, bt as DraftNotComplete, c as AiCriterionJudgement, cn as ReadAloudSlowMedia, ct as MediaProgress, d as AiCritiqueFinding, dn as ScoringDetail, dt as SequenceSlot, en as MultipleChoiceLearnerResponse, et as AiVideoDraft, f as AiCritiqueFindingResult, fn as ScoringOutcome, ft as SequenceSlotGroup, g as AiDictationFacts, gn as WrittenResponseData, gt as TimelineCue, h as AiCritiqueResult, hn as ValidationResult, ht as TimelineChapter, i as AiCoaching, in as ReadAloudData, it as AiWritingFeedback, j as AiGeneratedDraft, jn as CriterionScore, jt as BlankConfig, k as AiGapFact, kn as XAPIStatement, kt as ActivityResult, l as AiCritique, ln as RecordingBounds, lt as MediaTimeline, m as AiCritiqueRequest, mn as ValidationError, mt as StimulusKind, n as AiActivityInput, nn as MultipleChoiceOptionMedia, nt as AiWritingCorrection, o as AiCoachingResult, on as ReadAloudDimensionWeight, ot as AiWritingFeedbackResult, p as AiCritiqueKind, pn as ScoringResult, pt as Stimulus, q as AiReadingWordFact, qt as InteractionKind, r as AiBlankFact, rn as NativeControlHint, rt as AiWritingFacts, s as AiCoachingWord, sn as ReadAloudLearnerResponse, st as ItemGroup, t as ActivityAiPermissions, tn as MultipleChoiceOption, tt as AiWordFact, u as AiCritiqueField, un as RecordingRef, ut as SequenceEntry, v as AiDraftProblem, vn as WrittenResponseRubric, vt as DraftContext, w as AiDraftsRequest, wn as XAPIContextActivities, wt as ItemFindingSeverity, x as AiDraftType, xn as XAPIActor, xt as DraftSeverity, y as AiDraftSettings, yn as WrittenResponseRubricCriterion, yt as DraftIssue, z as AiGroupInput, zn as GradingState, zt as FillInTheBlanksData } from "./ai-BYryFkF9.js";
|
|
2
|
+
import { $ as hasGrade, A as diffDictationChars, At as Band, B as outcomeFromRoutedGrade, C as validateItemScoringPolicy, Ct as SpeechSyllable, D as DICTATION_MAX_TEXT_LENGTH, Dt as SpeechWordError, E as DICTATION_MAX_EQUIVALENCE_LENGTH, Et as SpeechWord, F as dictationReferenceWords, Ft as roundGrade, G as CalibrationReport, H as GradeFromJudgementOptions, I as CalibrationThresholds, J as TotalCalibration, K as CalibrationScope, L as GradeRoutingContext, M as DictationReference, Mt as RoundingPolicy, N as DictationWordAlignment, Nt as classifyBand, O as DICTATION_MAX_TRANSCRIPT_LENGTH, Ot as WavInspection, P as alignDictation, Pt as gte, Q as gradeFromRubric, R as GradeRoutingPolicy, S as scoreTries, St as SpeechPlausibilityPolicy, T as DICTATION_MAX_EQUIVALENCES, Tt as SpeechUnscorableCode, U as gradeFromJudgement, V as routeGrade, W as CalibrationPair, X as graderConfiguration, Y as calibrationReport, Z as GradeFromRubricOptions, _ as DEFAULT_PASS_THRESHOLD, _t as ReadAloudWordState, a as evaluateTries, at as ItemTry, b as ITEM_SCORING_MAX_RETRIES, bt as SpeechPhoneme, c as inspectWav, ct as AssessmentScore, d as READ_ALOUD_MAX_SECONDS, dt as PassFailureReason, et as outcomeFromGrade, f as READ_ALOUD_MAX_TAKES, ft as ScoredItem, g as alignReadAloud, gt as ReadAloudWordAlignment, h as validateSpeechAssessment, ht as GradeReadAloudOptions, i as evaluate, it as ItemTriesScore, j as DictationAlignment, jt as RoundingMode, k as DictationCharOp, kt as WavInspectionPolicy, l as READ_ALOUD_MAX_DIMENSION_WEIGHT, lt as AssessmentSectionInput, m as gradeReadAloud, mt as composeAssessmentScore, n as ItemTriesOutcome, nt as ItemScoringPolicy, o as score, ot as ItemTryScore, p as SPEECH_ASSESSMENT_MAX_WORDS, pt as SectionScore, q as CriterionCalibration, r as ScoringOptions, rt as ItemScoringPolicyIssue, s as outcomeFromUnscorable, st as ResolvedItemScoringPolicy, t as EvaluateOptions, tt as ItemScoringCount, u as READ_ALOUD_MAX_REFERENCE_LENGTH, ut as CompositionPolicy, v as computePassThreshold, vt as SpeechAssessment, w as DICTATION_MAX_ACCEPTED_TRANSCRIPTS, wt as SpeechUnscorable, x as resolveItemScoringPolicy, xt as SpeechPhonemeCandidate, y as DEFAULT_ITEM_SCORING_POLICY, yt as SpeechMeasurement, z as inAuditSample } from "./index-DUaW1Tj5.js";
|
|
3
|
+
import { C as RedactedMultipleChoiceData, D as RedactedStimulus, E as RedactedReadAloudData, O as RedactedWrittenResponseData, S as RedactedGapSelectGap, T as RedactedMultipleChoiceOptionMedia, _ as RedactedDictationSlowMedia, a as fillInTheBlanksJsonSchema, b as RedactedGapSelectChoice, c as jsonSchemaFor, d as stimulusJsonSchema, f as writtenResponseJsonSchema, g as RedactedDictationData, h as RedactedBlankConfig, i as dictationJsonSchema, l as multipleChoiceJsonSchema, m as RedactedActivity, n as validateMedia, o as gapSelectJsonSchema, p as validateItemGroup, r as validateOptionMedia, s as itemGroupJsonSchema, t as validateActivity, u as readAloudJsonSchema, v as RedactedFillInTheBlanksData, w as RedactedMultipleChoiceOption, x as RedactedGapSelectData, y as RedactedGapSelectBank } from "./index-CxpiWedW.js";
|
|
4
|
+
import { a as XAPIObjectParams, c as xapiDefinitionFor, d as XAPI_VERB_DISPLAY, i as SubmittedStatementParams, l as XAPIVerb, n as AnsweredStatementParams, o as XAPIStatementParams, r as CompletedStatementParams, s as xAPIBuilder, t as validateXAPIStatement, u as XAPIVerbKey } from "./index-wMc1E_aM.js";
|
|
5
|
+
//#region src/ai-material.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* What a model is told about the group a question sits in: the material the
|
|
8
|
+
* learner reads and sees beside it.
|
|
9
|
+
*
|
|
10
|
+
* Internal: the request builders in `ai.ts` and `ai-writing.ts` are its public
|
|
11
|
+
* face, through their `group` input.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* The longest material text a model is given, in code points. A longer one is
|
|
15
|
+
* cut and marked `truncated`: a long reading passage on an exam paper runs to
|
|
16
|
+
* 4,000–7,000.
|
|
17
|
+
*/
|
|
18
|
+
export declare const AI_MATERIAL_MAX_LENGTH = 12000;
|
|
19
|
+
//#endregion
|
|
5
20
|
//#region src/ai.d.ts
|
|
6
21
|
/**
|
|
7
22
|
* The activity types the SDK builds facts for, and which of them take hints.
|
|
@@ -54,11 +69,16 @@ export declare function buildAiFacts(data: AiActivityInput, response: LearnerRes
|
|
|
54
69
|
* positive and finite, `score` finite from 0 to it) gets no explanation at all:
|
|
55
70
|
* explaining 85 "out of 1" would tell the model a wrong answer was correct, and
|
|
56
71
|
* grading locally instead would speak to a grade the screen does not show.
|
|
72
|
+
*
|
|
73
|
+
* `group` is the item group the question sits in: its material — the passage,
|
|
74
|
+
* or the instructions the group's questions share — goes with the request as
|
|
75
|
+
* `material`, as the learner sees it.
|
|
57
76
|
*/
|
|
58
77
|
export declare function aiExplanationRequest(input: {
|
|
59
78
|
data: AiActivityInput;
|
|
60
79
|
response: LearnerResponse | null;
|
|
61
80
|
outcome?: ItemOutcome;
|
|
81
|
+
group?: AiGroupInput;
|
|
62
82
|
learnerLocale?: string;
|
|
63
83
|
}): AiExplanationRequest | null;
|
|
64
84
|
/**
|
|
@@ -68,12 +88,17 @@ export declare function aiExplanationRequest(input: {
|
|
|
68
88
|
*
|
|
69
89
|
* The facts carry the key, and which parts the learner has right so far, so a
|
|
70
90
|
* model can hint where it helps. The learner never sees them; a hint that
|
|
71
|
-
* contains an answer is refused by {@link checkAiHint}
|
|
91
|
+
* contains an answer is refused by {@link checkAiHint}, whatever it quotes —
|
|
92
|
+
* the group's material included.
|
|
93
|
+
*
|
|
94
|
+
* `group` is the item group the question sits in, as for
|
|
95
|
+
* {@link aiExplanationRequest}.
|
|
72
96
|
*/
|
|
73
97
|
export declare function aiHintRequest(input: {
|
|
74
98
|
data: AiActivityInput;
|
|
75
99
|
response: LearnerResponse | null;
|
|
76
100
|
previousHints: readonly string[];
|
|
101
|
+
group?: AiGroupInput;
|
|
77
102
|
learnerLocale?: string;
|
|
78
103
|
}): AiHintRequest | null;
|
|
79
104
|
/**
|
|
@@ -376,11 +401,90 @@ export declare function interactiveVideoFromDrafts(input: {
|
|
|
376
401
|
newId: () => string;
|
|
377
402
|
}): AiVideoDraft;
|
|
378
403
|
//#endregion
|
|
379
|
-
//#region src/ai-
|
|
404
|
+
//#region src/ai-grading.d.ts
|
|
405
|
+
/**
|
|
406
|
+
* How far a model's level probabilities may sum from 1 and still be a
|
|
407
|
+
* distribution: rounding in a model's output, not a different judgement.
|
|
408
|
+
*/
|
|
409
|
+
export declare const AI_GRADING_PROBABILITY_TOLERANCE = 0.000001;
|
|
410
|
+
/**
|
|
411
|
+
* The request for a model's grade of a submitted written response, or why there
|
|
412
|
+
* is none to make.
|
|
413
|
+
*
|
|
414
|
+
* Grading happens on the server, from the whole item: the rubric is what a
|
|
415
|
+
* model is held to, so an item without one — or one whose criteria are not each
|
|
416
|
+
* a name and a weight — gives no request, nor does a `redact()` projection or
|
|
417
|
+
* an empty response. A criterion's `levels`, when there are any, must be ones
|
|
418
|
+
* the grading functions can read; levels they cannot read give no request
|
|
419
|
+
* rather than a grade on a scale the author did not mean. `group` is the item
|
|
420
|
+
* group the task sits in: its material goes with the request as `material`, as
|
|
421
|
+
* on feedback on writing.
|
|
422
|
+
*
|
|
423
|
+
* The author's AI switch (`ai.explanations`) is not read: grading is the
|
|
424
|
+
* deployment's decision, made on the server, not help a learner asks for.
|
|
425
|
+
*/
|
|
426
|
+
export declare function aiGradingRequest(input: {
|
|
427
|
+
data: AiActivityInput;
|
|
428
|
+
response: LearnerResponse | null;
|
|
429
|
+
group?: AiGroupInput;
|
|
430
|
+
learnerLocale?: string;
|
|
431
|
+
}): {
|
|
432
|
+
ok: true;
|
|
433
|
+
request: AiGradingRequest;
|
|
434
|
+
} | {
|
|
435
|
+
ok: false;
|
|
436
|
+
problem: AiGradingRequestProblem;
|
|
437
|
+
path?: (string | number)[];
|
|
438
|
+
};
|
|
439
|
+
type Refused = {
|
|
440
|
+
ok: false;
|
|
441
|
+
refusal: AiRefusal;
|
|
442
|
+
};
|
|
443
|
+
/**
|
|
444
|
+
* Checks a grade a port returned for `request`. Whole or nothing, as every AI
|
|
445
|
+
* text is: a reply the SDK doubts in any part is refused, and is no grade —
|
|
446
|
+
* re-ask the model or send the response to a person; never record a 0.
|
|
447
|
+
*
|
|
448
|
+
* - **Every criterion of the rubric, once** (`misses-criteria`). Names match as
|
|
449
|
+
* written, or folded when the folded name is one criterion's alone. Leaving
|
|
450
|
+
* one out, inventing or renaming one, judging one twice or calling one not
|
|
451
|
+
* applicable refuses the reply: a total renormalised over fewer criteria
|
|
452
|
+
* is a grade of a different task.
|
|
453
|
+
* - **On each criterion's own scale** (`out-of-scale`). With levels: a `level`
|
|
454
|
+
* the criterion has, as labelled (case and spacing aside), and any
|
|
455
|
+
* `probabilities` a distribution over its levels, lowest first, whose
|
|
456
|
+
* likeliest is the level chosen. Without levels: a `score` from 0 to its
|
|
457
|
+
* `maxScore`, 1 by default.
|
|
458
|
+
* - **Every correction quotes the response** (`misquotes-answer`), anchored as
|
|
459
|
+
* feedback on writing anchors it.
|
|
460
|
+
* - **Text fields** — a criterion's `comment` (at most
|
|
461
|
+
* `AI_WRITING_MAX_FIELD_LENGTH` code points), `feedback` and `rationale`
|
|
462
|
+
* (at most `AI_TEXT_MAX_LENGTH`) — are plain text, cleaned; longer is
|
|
463
|
+
* `too-long`. `requiresHumanReview` is a boolean.
|
|
464
|
+
*
|
|
465
|
+
* The total is not computed here: `gradeFromJudgement` computes it, as
|
|
466
|
+
* `gradeFromRubric` computes every grade in the SDK.
|
|
467
|
+
*/
|
|
468
|
+
export declare function checkAiGrading(raw: unknown, request: AiGradingRequest): {
|
|
469
|
+
ok: true;
|
|
470
|
+
judgement: AiGradingJudgement;
|
|
471
|
+
} | Refused;
|
|
472
|
+
//#endregion
|
|
473
|
+
//#region src/ai-written.d.ts
|
|
474
|
+
/**
|
|
475
|
+
* What the AI features about a written response share: reading a model's text
|
|
476
|
+
* fields, and finding each correction's quote in the learner's text.
|
|
477
|
+
*
|
|
478
|
+
* Internal. `ai-writing.ts` (feedback on a draft) and `ai-grading.ts` (a
|
|
479
|
+
* grade) are their public faces, and hold every correction to the same
|
|
480
|
+
* anchoring.
|
|
481
|
+
*/
|
|
380
482
|
/** The most corrections one piece of writing feedback may carry. More is refused, not cut. */
|
|
381
483
|
export declare const AI_WRITING_MAX_CORRECTIONS = 20;
|
|
382
484
|
/** The longest quote, correction, explanation or criterion comment, in code points. */
|
|
383
485
|
export declare const AI_WRITING_MAX_FIELD_LENGTH = 500;
|
|
486
|
+
//#endregion
|
|
487
|
+
//#region src/ai-writing.d.ts
|
|
384
488
|
/**
|
|
385
489
|
* The request for feedback on a draft, or `null` when there is none to give:
|
|
386
490
|
* not a written response, an author who switched explanations off (writing
|
|
@@ -390,12 +494,15 @@ export declare const AI_WRITING_MAX_FIELD_LENGTH = 500;
|
|
|
390
494
|
* The facts are the task as the learner saw it, the draft verbatim with its
|
|
391
495
|
* word count recomputed as the grader will count it, and the rubric the answer
|
|
392
496
|
* will be graded on. `previousFeedback` is the text of the feedback already
|
|
393
|
-
* shown on earlier drafts, so a model can speak to what changed.
|
|
497
|
+
* shown on earlier drafts, so a model can speak to what changed. `group` is the
|
|
498
|
+
* item group the task sits in: its material, the text a summary is of, goes
|
|
499
|
+
* with the request as `material`.
|
|
394
500
|
*/
|
|
395
501
|
export declare function aiWritingFeedbackRequest(input: {
|
|
396
502
|
data: AiActivityInput;
|
|
397
503
|
response: LearnerResponse | null;
|
|
398
504
|
previousFeedback?: readonly string[];
|
|
505
|
+
group?: AiGroupInput;
|
|
399
506
|
learnerLocale?: string;
|
|
400
507
|
}): AiWritingFeedbackRequest | null;
|
|
401
508
|
/**
|
|
@@ -1189,95 +1296,6 @@ export declare class DeferredScoringError extends Error {
|
|
|
1189
1296
|
constructor(activityType: string);
|
|
1190
1297
|
}
|
|
1191
1298
|
//#endregion
|
|
1192
|
-
//#region src/grading.d.ts
|
|
1193
|
-
/** Options for {@link gradeFromRubric}. */
|
|
1194
|
-
export interface GradeFromRubricOptions {
|
|
1195
|
-
/**
|
|
1196
|
-
* Scaled score [0,1] required to pass. Defaults to the activity's
|
|
1197
|
-
* `passThreshold`, or {@link DEFAULT_PASS_THRESHOLD} when absent.
|
|
1198
|
-
*/
|
|
1199
|
-
passThreshold?: number;
|
|
1200
|
-
/** Narrative feedback for the learner, carried onto the record verbatim. */
|
|
1201
|
-
feedback?: string | null;
|
|
1202
|
-
/**
|
|
1203
|
-
* Compare the pass line the way the score is displayed — both sides rounded,
|
|
1204
|
-
* via `gte` — whichever threshold applies: `passThreshold` above, the
|
|
1205
|
-
* activity's own, or the 0.7 default. The returned `score` stays unrounded.
|
|
1206
|
-
* Opt-in, as on `score()` and `evaluate()`: switching it on moves pass/fail
|
|
1207
|
-
* for totals in the rounding band.
|
|
1208
|
-
*
|
|
1209
|
-
* Checked before any criterion is read: `null` reads as no policy, and a
|
|
1210
|
-
* policy that cannot be applied — an unknown `mode`, or a `dp` that is not a
|
|
1211
|
-
* whole number from 0 to 15 — throws a `RangeError`, even for a rubric that
|
|
1212
|
-
* turns out to be unscorable.
|
|
1213
|
-
*/
|
|
1214
|
-
rounding?: RoundingPolicy;
|
|
1215
|
-
}
|
|
1216
|
-
/**
|
|
1217
|
-
* Computes the weighted total from per-criterion scores — the arithmetic that
|
|
1218
|
-
* must NOT be delegated to a language model.
|
|
1219
|
-
*
|
|
1220
|
-
* A grader is asked for judgement (how good is this criterion?), not for
|
|
1221
|
-
* mental arithmetic. Asking a model to also produce the weighted total makes
|
|
1222
|
-
* the final grade unverifiable and unreproducible: two runs can return
|
|
1223
|
-
* different totals for identical criterion scores. This function makes the
|
|
1224
|
-
* total a pure function of the judgements, so a grade can be recomputed and
|
|
1225
|
-
* audited years later.
|
|
1226
|
-
*
|
|
1227
|
-
* Weights are normalised by their sum, so they need not add to 1; each must be
|
|
1228
|
-
* zero or more, and their sum a positive, finite number, or the result is
|
|
1229
|
-
* `unscorable`. Criteria marked `notApplicable`, and those carrying no numeric
|
|
1230
|
-
* `score` (a purely banded judgement), are excluded from both numerator and
|
|
1231
|
-
* denominator, weight included. When nothing scoreable remains the result is
|
|
1232
|
-
* `unscorable`, never a zero.
|
|
1233
|
-
*
|
|
1234
|
-
* Scores need not be in [0,1]: set `maxScore` on a criterion to declare what
|
|
1235
|
-
* its score is out of, and each is normalised before weighting. A grader
|
|
1236
|
-
* working out of 100 says so and is done:
|
|
1237
|
-
*
|
|
1238
|
-
* ```ts
|
|
1239
|
-
* gradeFromRubric([
|
|
1240
|
-
* { name: 'Task achievement', score: 82, maxScore: 100, weight: 2 },
|
|
1241
|
-
* { name: 'Range', score: 7, maxScore: 9, weight: 1 },
|
|
1242
|
-
* ]);
|
|
1243
|
-
* ```
|
|
1244
|
-
*
|
|
1245
|
-
* The returned `GradeRecord.score` is always scaled [0,1] against
|
|
1246
|
-
* `maxScore: 1`, like every other score in the SDK.
|
|
1247
|
-
*/
|
|
1248
|
-
export declare function gradeFromRubric(criteria: readonly CriterionScore[], activityData?: ActivityData, options?: GradeFromRubricOptions): GradeRecord | {
|
|
1249
|
-
unscorable: true;
|
|
1250
|
-
reason: string;
|
|
1251
|
-
};
|
|
1252
|
-
/**
|
|
1253
|
-
* Lifts a {@link GradeRecord} into the `graded` arm of {@link ItemOutcome}, so
|
|
1254
|
-
* a grade that arrived asynchronously renders through the same path as a
|
|
1255
|
-
* synchronously scored item. The score/passed/feedback fields are mirrored
|
|
1256
|
-
* onto the outcome for uniform reads; `grade` carries the full record.
|
|
1257
|
-
*
|
|
1258
|
-
* A record whose numbers cannot be a grade is refused, as `evaluate` refuses a
|
|
1259
|
-
* non-finite score and {@link gradeFromRubric} one outside [0,1]. `maxScore`
|
|
1260
|
-
* must be a positive, finite number and `score` a finite number from 0 to it (a
|
|
1261
|
-
* hair above, one part in a billion, is float noise and passes as it is).
|
|
1262
|
-
* Anything else — NaN, 85 "out of 1", a score out of 0 — comes back as
|
|
1263
|
-
* `{ status: 'deferred', reason: 'grade_rejected', maxScore: 1, rejectedGrade }`
|
|
1264
|
-
* with the record kept verbatim. Not `graded`, or its `passed` would be read as
|
|
1265
|
-
* a verdict; not `unscorable`, which `composeAssessmentScore` drops from the
|
|
1266
|
-
* denominator while letting the attempt go final — so a failing grade on the
|
|
1267
|
-
* wrong scale would vanish and the rest would be recorded as a pass. Deferred
|
|
1268
|
-
* is what it is: the slot is still owed a real grade, so a composed attempt
|
|
1269
|
-
* stays `provisional` and names the slot in `rejectedSlotIds`.
|
|
1270
|
-
*/
|
|
1271
|
-
export declare function outcomeFromGrade(grade: GradeRecord): ItemOutcome;
|
|
1272
|
-
/**
|
|
1273
|
-
* True when an outcome carries a real grade — either the SDK scored it
|
|
1274
|
-
* synchronously or a grader returned one. Use this instead of testing
|
|
1275
|
-
* `status === 'scored'`, which silently misses asynchronously graded work.
|
|
1276
|
-
*/
|
|
1277
|
-
export declare function hasGrade(outcome: ItemOutcome): outcome is Extract<ItemOutcome, {
|
|
1278
|
-
status: 'scored' | 'graded';
|
|
1279
|
-
}>;
|
|
1280
|
-
//#endregion
|
|
1281
1299
|
//#region src/item-group.d.ts
|
|
1282
1300
|
/** Narrows a sequence entry to an item group. */
|
|
1283
1301
|
export declare function isItemGroup<TItem extends {
|
|
@@ -2088,5 +2106,5 @@ interface ThemeTokens {
|
|
|
2088
2106
|
'--lk-transition-base': string;
|
|
2089
2107
|
}
|
|
2090
2108
|
//#endregion
|
|
2091
|
-
export { type ActivityAiPermissions, type ActivityData, type ActivityDataMap, type ActivityFeedback, type ActivityMedia, type ActivityResult, type ActivityType, type ActivityTypeAuthoring, type ActivityTypeDescriptor, type ActivityTypeInterop, type ActivityTypeScoring, type AiActivityInput, type AiBlankFact, type AiCoaching, type AiCoachingRequest, type AiCoachingResult, type AiCoachingWord, type AiCriterionJudgement, type AiCritique, type AiCritiqueField, type AiCritiqueFinding, type AiCritiqueFindingResult, type AiCritiqueKind, type AiCritiqueRequest, type AiCritiqueResult, type AiDictationFacts, type AiDraftCaption, type AiDraftProblem, type AiDraftSettings, type AiDraftSource, type AiDraftType, type AiDrafts, type AiDraftsCall, type AiDraftsRequest, type AiDraftsRun, type AiExplanationRequest, type AiFeature, type AiFillInTheBlanksFacts, type AiGapFact, type AiGapSelectFacts, type AiGeneratedDraft, type AiGrade, type AiHintRequest, type AiItemFacts, type AiMultipleChoiceFacts, type AiOptionFact, type AiProvenance, type AiReadingFacts, type AiReadingWordFact, type AiRefusal, type AiRubricCriterionFact, type AiSoundFact, type AiSupportedActivityType, type AiTextResult, type AiVerdict, type AiVideoDraft, type AiWordFact, type AiWritingCorrection, type AiWritingFacts, type AiWritingFeedback, type AiWritingFeedbackRequest, type AiWritingFeedbackResult, type AnsweredStatementParams, type AssessmentScore, type AssessmentSectionInput, type AttemptPlan, type AttemptPlanDrift, type AttemptPlanSlot, type AttemptState, type Band, type BlankConfig, type BuiltInActivityType, type CompletedStatementParams, type CompositionPolicy, type CriterionScore, 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, type DeferredReason, type DeferredScoringPartial, type DeliveryPolicy, type DeliveryPolicyIssue, type DictationAlignment, type DictationCharOp, type DictationData, type DictationEquivalence, type DictationLearnerResponse, type DictationReference, type DictationSlowMedia, type DictationTolerance, type DictationWordAlignment, type DraftComplete, type DraftContext, type DraftIssue, type DraftNotComplete, type DraftSeverity, type DraftValidationResult, EvaluateOptions, type FieldPolicy, type FillInTheBlanksData, type FillInTheBlanksLearnerResponse, type GapSelectBank, type GapSelectChoice, type GapSelectData, type GapSelectGap, type GapSelectLearnerResponse, type GradeReadAloudOptions, type GradeRecord, type Grader, type GraderKind, type GraderUsage, type GradingState, ITEM_SCORING_MAX_RETRIES, type InlineCorrection, type InteractionEvent, type InteractionKind, type ItemFinding, type ItemFindingSeverity, type ItemGroup, type ItemOutcome, type ItemScoringCount, type ItemScoringPolicy, type ItemScoringPolicyIssue, ItemTriesOutcome, type ItemTriesScore, type ItemTry, type ItemTryScore, type LearnerResponse, type LearnerResponseMap, type MediaBudgetRef, type MediaPlayClaim, type MediaPlayGrant, type MediaPlayLedger, type MediaPlayLedgerEntry, type MediaPlaybackPolicy, type MediaProgress, type MediaTimeline, type MediaTrack, type MultipleChoiceData, type MultipleChoiceLearnerResponse, type MultipleChoiceOption, type MultipleChoiceOptionMedia, type NativeControlHint, type PartialScoringResult, type PassFailureReason, READ_ALOUD_MAX_DIMENSION_WEIGHT, READ_ALOUD_MAX_REFERENCE_LENGTH, READ_ALOUD_MAX_SECONDS, READ_ALOUD_MAX_TAKES, type ReadAloudData, type ReadAloudDimension, type ReadAloudDimensionWeight, type ReadAloudLearnerResponse, type ReadAloudSlowMedia, type ReadAloudWordAlignment, type ReadAloudWordState, type RecordingBounds, type RecordingRef, type RedactedActivity, type RedactedBlankConfig, type RedactedDictationData, type RedactedDictationSlowMedia, type RedactedFillInTheBlanksData, type RedactedGapSelectBank, type RedactedGapSelectChoice, type RedactedGapSelectData, type RedactedGapSelectGap, type RedactedMultipleChoiceData, type RedactedMultipleChoiceOption, type RedactedMultipleChoiceOptionMedia, type RedactedReadAloudData, type RedactedStimulus, type RedactedWrittenResponseData, type RegisteredActivityTypeDescriptor, type ResolvedDeliveryPolicy, type ResolvedItemScoringPolicy, type ResponseDiffEntry, type RoundingMode, type RoundingPolicy, SPEECH_ASSESSMENT_MAX_WORDS, type ScoredItem, type ScoringDetail, ScoringOptions, type ScoringOutcome, type ScoringResult, type SectionScore, type Sensitivity, type SequenceEntry, type SequenceSlot, type SequenceSlotGroup, type SpeechAssessment, type SpeechMeasurement, type SpeechPhoneme, type SpeechPhonemeCandidate, type SpeechPlausibilityPolicy, type SpeechSyllable, type SpeechUnscorable, type SpeechUnscorableCode, type SpeechWord, type SpeechWordError, type StandardSchemaV1, type Stimulus, type StimulusKind, type SubmittedStatementParams, type TextMatchPolicy, type TextMatchResult, type ThemeTokens, type TimelineChapter, type TimelineCue, type ValidationError, type ValidationResult, type WavInspection, type WavInspectionPolicy, type WrittenResponseData, type WrittenResponseLearnerResponse, type WrittenResponseRubric, type WrittenResponseRubricCriterion, type XAPIActor, type XAPIConfig, type XAPIContext, type XAPIContextActivities, type XAPIError, type XAPIInteractionType, type XAPIObject, type XAPIObjectParams, type XAPIResult, type XAPIScore, type XAPIStatement, type XAPIStatementParams, XAPIVerb, type XAPIVerbKey, type XAPIVerbObject, XAPI_VERB_DISPLAY, alignDictation, alignReadAloud, classifyBand, composeAssessmentScore, computePassThreshold, dictationJsonSchema, dictationReferenceWords, diffDictationChars, evaluate, evaluateTries, fillInTheBlanksJsonSchema, gapSelectJsonSchema, gradeReadAloud, gte, inspectWav, itemGroupJsonSchema, jsonSchemaFor, levenshteinDistance, matchText, multipleChoiceJsonSchema, outcomeFromUnscorable, readAloudJsonSchema, resolveItemScoringPolicy, roundGrade, score, scoreTries, stimulusJsonSchema, validateActivity, validateItemGroup, validateItemScoringPolicy, validateMedia, validateOptionMedia, validateSpeechAssessment, validateXAPIStatement, writtenResponseJsonSchema, xAPIBuilder, xapiDefinitionFor };
|
|
2109
|
+
export { type ActivityAiPermissions, type ActivityData, type ActivityDataMap, type ActivityFeedback, type ActivityMedia, type ActivityResult, type ActivityType, type ActivityTypeAuthoring, type ActivityTypeDescriptor, type ActivityTypeInterop, type ActivityTypeScoring, type AiActivityInput, type AiBlankFact, type AiCoaching, type AiCoachingRequest, type AiCoachingResult, type AiCoachingWord, type AiCriterionJudgement, type AiCritique, type AiCritiqueField, type AiCritiqueFinding, type AiCritiqueFindingResult, type AiCritiqueKind, type AiCritiqueRequest, type AiCritiqueResult, type AiDictationFacts, type AiDraftCaption, type AiDraftProblem, type AiDraftSettings, type AiDraftSource, type AiDraftType, type AiDrafts, type AiDraftsCall, type AiDraftsRequest, type AiDraftsRun, type AiExplanationRequest, type AiFeature, type AiFillInTheBlanksFacts, type AiGapFact, type AiGapSelectFacts, type AiGeneratedDraft, type AiGrade, type AiGradedCriterion, type AiGradingCriterionFact, type AiGradingFacts, type AiGradingJudgement, type AiGradingRequest, type AiGradingRequestProblem, type AiGroupInput, type AiHintRequest, type AiItemFacts, type AiMaterialFacts, type AiMultipleChoiceFacts, type AiOptionFact, type AiProvenance, type AiReadingFacts, type AiReadingWordFact, type AiRefusal, type AiRubricCriterionFact, type AiSoundFact, type AiSupportedActivityType, type AiTextResult, type AiVerdict, type AiVideoDraft, type AiWordFact, type AiWritingCorrection, type AiWritingFacts, type AiWritingFeedback, type AiWritingFeedbackRequest, type AiWritingFeedbackResult, type AnsweredStatementParams, type AssessmentScore, type AssessmentSectionInput, type AttemptPlan, type AttemptPlanDrift, type AttemptPlanSlot, type AttemptState, type Band, type BlankConfig, type BuiltInActivityType, type CalibrationPair, type CalibrationReport, type CalibrationScope, type CalibrationThresholds, type CompletedStatementParams, type CompositionPolicy, type CriterionCalibration, type CriterionScore, 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, type DeferredReason, type DeferredScoringPartial, type DeliveryPolicy, type DeliveryPolicyIssue, type DictationAlignment, type DictationCharOp, type DictationData, type DictationEquivalence, type DictationLearnerResponse, type DictationReference, type DictationSlowMedia, type DictationTolerance, type DictationWordAlignment, type DraftComplete, type DraftContext, type DraftIssue, type DraftNotComplete, type DraftSeverity, type DraftValidationResult, EvaluateOptions, type FieldPolicy, type FillInTheBlanksData, type FillInTheBlanksLearnerResponse, type GapSelectBank, type GapSelectChoice, type GapSelectData, type GapSelectGap, type GapSelectLearnerResponse, type GradeFromJudgementOptions, GradeFromRubricOptions, type GradeReadAloudOptions, type GradeRecord, type GradeRouting, type GradeRoutingContext, type GradeRoutingPolicy, type GradeRoutingReason, type Grader, type GraderConfiguration, type GraderKind, type GraderUsage, type GradingState, ITEM_SCORING_MAX_RETRIES, type InlineCorrection, type InteractionEvent, type InteractionKind, type ItemFinding, type ItemFindingSeverity, type ItemGroup, type ItemOutcome, type ItemScoringCount, type ItemScoringPolicy, type ItemScoringPolicyIssue, ItemTriesOutcome, type ItemTriesScore, type ItemTry, type ItemTryScore, type LearnerResponse, type LearnerResponseMap, type MediaBudgetRef, type MediaPlayClaim, type MediaPlayGrant, type MediaPlayLedger, type MediaPlayLedgerEntry, type MediaPlaybackPolicy, type MediaProgress, type MediaTimeline, type MediaTrack, type MultipleChoiceData, type MultipleChoiceLearnerResponse, type MultipleChoiceOption, type MultipleChoiceOptionMedia, type NativeControlHint, type PartialScoringResult, type PassFailureReason, READ_ALOUD_MAX_DIMENSION_WEIGHT, READ_ALOUD_MAX_REFERENCE_LENGTH, READ_ALOUD_MAX_SECONDS, READ_ALOUD_MAX_TAKES, type ReadAloudData, type ReadAloudDimension, type ReadAloudDimensionWeight, type ReadAloudLearnerResponse, type ReadAloudSlowMedia, type ReadAloudWordAlignment, type ReadAloudWordState, type RecordingBounds, type RecordingRef, type RedactedActivity, type RedactedBlankConfig, type RedactedDictationData, type RedactedDictationSlowMedia, type RedactedFillInTheBlanksData, type RedactedGapSelectBank, type RedactedGapSelectChoice, type RedactedGapSelectData, type RedactedGapSelectGap, type RedactedMultipleChoiceData, type RedactedMultipleChoiceOption, type RedactedMultipleChoiceOptionMedia, type RedactedReadAloudData, type RedactedStimulus, type RedactedWrittenResponseData, type RegisteredActivityTypeDescriptor, type ResolvedDeliveryPolicy, type ResolvedItemScoringPolicy, type ResponseDiffEntry, type RoundingMode, type RoundingPolicy, SPEECH_ASSESSMENT_MAX_WORDS, type ScoredItem, type ScoringDetail, ScoringOptions, type ScoringOutcome, type ScoringResult, type SectionScore, type Sensitivity, type SequenceEntry, type SequenceSlot, type SequenceSlotGroup, type SpeechAssessment, type SpeechMeasurement, type SpeechPhoneme, type SpeechPhonemeCandidate, type SpeechPlausibilityPolicy, type SpeechSyllable, type SpeechUnscorable, type SpeechUnscorableCode, type SpeechWord, type SpeechWordError, type StandardSchemaV1, type Stimulus, type StimulusKind, type SubmittedStatementParams, type TextMatchPolicy, type TextMatchResult, type ThemeTokens, type TimelineChapter, type TimelineCue, type TotalCalibration, type ValidationError, type ValidationResult, type WavInspection, type WavInspectionPolicy, type WrittenResponseData, type WrittenResponseLearnerResponse, type WrittenResponseRubric, type WrittenResponseRubricCriterion, type WrittenResponseRubricLevel, type XAPIActor, type XAPIConfig, type XAPIContext, type XAPIContextActivities, type XAPIError, type XAPIInteractionType, type XAPIObject, type XAPIObjectParams, type XAPIResult, type XAPIScore, type XAPIStatement, type XAPIStatementParams, XAPIVerb, type XAPIVerbKey, type XAPIVerbObject, XAPI_VERB_DISPLAY, alignDictation, alignReadAloud, calibrationReport, classifyBand, composeAssessmentScore, computePassThreshold, dictationJsonSchema, dictationReferenceWords, diffDictationChars, evaluate, evaluateTries, fillInTheBlanksJsonSchema, gapSelectJsonSchema, gradeFromJudgement, gradeFromRubric, gradeReadAloud, graderConfiguration, gte, hasGrade, inAuditSample, inspectWav, itemGroupJsonSchema, jsonSchemaFor, levenshteinDistance, matchText, multipleChoiceJsonSchema, outcomeFromGrade, outcomeFromRoutedGrade, outcomeFromUnscorable, readAloudJsonSchema, resolveItemScoringPolicy, roundGrade, routeGrade, score, scoreTries, stimulusJsonSchema, validateActivity, validateItemGroup, validateItemScoringPolicy, validateMedia, validateOptionMedia, validateSpeechAssessment, validateXAPIStatement, writtenResponseJsonSchema, xAPIBuilder, xapiDefinitionFor };
|
|
2092
2110
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["_$__registry_js0.ActivityTypeDescriptor"],"sources":["../src/ai.ts","../src/ai-coaching.ts","../src/ai-critique.ts","../src/ai-drafts.ts","../src/ai-writing.ts","../src/types/delivery.ts","../src/types/attempt-plan.ts","../src/attempt-plan.ts","../src/types/attempt-state.ts","../src/attempt-state.ts","../src/authoring/item-group.ts","../src/authoring/index.ts","../src/built-in-types.ts","../src/content-hash.ts","../src/count-words.ts","../src/delivery.ts","../src/errors.ts","../src/
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["_$__registry_js0.ActivityTypeDescriptor"],"sources":["../src/ai-material.ts","../src/ai.ts","../src/ai-coaching.ts","../src/ai-critique.ts","../src/ai-drafts.ts","../src/ai-grading.ts","../src/ai-written.ts","../src/ai-writing.ts","../src/types/delivery.ts","../src/types/attempt-plan.ts","../src/attempt-plan.ts","../src/types/attempt-state.ts","../src/attempt-state.ts","../src/authoring/item-group.ts","../src/authoring/index.ts","../src/built-in-types.ts","../src/content-hash.ts","../src/count-words.ts","../src/delivery.ts","../src/errors.ts","../src/item-group.ts","../src/types/media-budget.ts","../src/media-budget.ts","../src/standard-schema.ts","../src/registry/define.ts","../src/registry/registry.ts","../src/redact.ts","../src/registry/builtins.ts","../src/shuffle.ts","../src/timeline.ts","../src/timeline-limits.ts","../src/types/theme.ts"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,81 +1,9 @@
|
|
|
1
|
-
import { A as
|
|
2
|
-
import { $ as
|
|
3
|
-
import { C as validateItemScoringPolicy, S as
|
|
4
|
-
import { a as INTERACTIVE_VIDEO_ITEM_TYPES, c as TIMELINE_MAX_QUIZZES, i as validateItemGroup, l as TIMELINE_MAX_TITLE_LENGTH, n as RedactedItemGroupSchema, o as TIMELINE_MAX_CHAPTERS, s as TIMELINE_MAX_ITEMS, u as isInteractiveVideoItemType } from "./item-group-
|
|
5
|
-
import { a as fillInTheBlanksJsonSchema, c as jsonSchemaFor, d as stimulusJsonSchema, f as writtenResponseJsonSchema, i as dictationJsonSchema, l as multipleChoiceJsonSchema, n as validateMedia, o as gapSelectJsonSchema, r as validateOptionMedia, s as itemGroupJsonSchema, t as validateActivity, u as readAloudJsonSchema } from "./schemas-
|
|
6
|
-
import { a as validateXAPIStatement, i as XAPI_VERB_DISPLAY, n as xapiDefinitionFor, r as XAPIVerb, t as xAPIBuilder } from "./xapi-
|
|
7
|
-
//#region src/content-hash.ts
|
|
8
|
-
/**
|
|
9
|
-
* Content fingerprinting — "is this the same content the learner was served?"
|
|
10
|
-
*
|
|
11
|
-
* A recorded attempt outlives the content it was taken against. Papers get
|
|
12
|
-
* corrected, a typo is fixed, an option is reworded — and six months later a
|
|
13
|
-
* remark, an appeal, or a per-item analysis is run against content that is no
|
|
14
|
-
* longer what the learner saw. Nothing warns anybody, because the ids all still
|
|
15
|
-
* match. A fingerprint stored with the attempt turns that silent drift into a
|
|
16
|
-
* question somebody can answer.
|
|
17
|
-
*/
|
|
18
|
-
/**
|
|
19
|
-
* Deterministic JSON: object keys sorted, arrays left in order, `undefined`
|
|
20
|
-
* omitted from objects (matching `JSON.stringify`) and rendered as `null`
|
|
21
|
-
* inside arrays.
|
|
22
|
-
*
|
|
23
|
-
* Key order is the whole point. Two objects that differ only in the order
|
|
24
|
-
* their keys happened to be written are the SAME content, and a fingerprint
|
|
25
|
-
* that disagreed would raise a false alarm every time a payload made a
|
|
26
|
-
* round-trip through a different serializer.
|
|
27
|
-
*/
|
|
28
|
-
function canonicalJson(value, seen = /* @__PURE__ */ new Set()) {
|
|
29
|
-
if (value === null) return "null";
|
|
30
|
-
if (typeof value === "number") return Number.isFinite(value) ? JSON.stringify(value === 0 ? 0 : value) : `"#${String(value)}"`;
|
|
31
|
-
if (typeof value === "string" || typeof value === "boolean") return JSON.stringify(value);
|
|
32
|
-
if (typeof value === "bigint") return `"#${value.toString()}n"`;
|
|
33
|
-
if (typeof value === "object") {
|
|
34
|
-
if (seen.has(value)) throw new Error("canonicalJson: the value contains a circular reference and cannot be fingerprinted.");
|
|
35
|
-
seen.add(value);
|
|
36
|
-
try {
|
|
37
|
-
if (Array.isArray(value)) return `[${value.map((element) => element === void 0 ? "null" : canonicalJson(element, seen)).join(",")}]`;
|
|
38
|
-
const source = value;
|
|
39
|
-
const parts = [];
|
|
40
|
-
for (const key of Object.keys(source).sort()) {
|
|
41
|
-
const entry = source[key];
|
|
42
|
-
if (entry === void 0) continue;
|
|
43
|
-
parts.push(`${JSON.stringify(key)}:${canonicalJson(entry, seen)}`);
|
|
44
|
-
}
|
|
45
|
-
return `{${parts.join(",")}}`;
|
|
46
|
-
} finally {
|
|
47
|
-
seen.delete(value);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return "null";
|
|
51
|
-
}
|
|
52
|
-
const FNV_OFFSET = 14695981039346656037n;
|
|
53
|
-
const FNV_PRIME = 1099511628211n;
|
|
54
|
-
const MASK64 = (1n << 64n) - 1n;
|
|
55
|
-
/**
|
|
56
|
-
* FNV-1a over the UTF-8 bytes of `input`, as 16 lowercase hex digits.
|
|
57
|
-
*
|
|
58
|
-
* **This is a change-detection fingerprint, not a tamper-evident signature.**
|
|
59
|
-
* It is deterministic across runtimes and dependency-free, which is what makes
|
|
60
|
-
* it usable in a stored grade record — but an adversary who can edit content
|
|
61
|
-
* can also, with effort, preserve the fingerprint. If you need the stronger
|
|
62
|
-
* property, sign the plan with a key the content author does not hold; this
|
|
63
|
-
* exists to catch honest edits, which is what actually happens.
|
|
64
|
-
*/
|
|
65
|
-
function fingerprint(input) {
|
|
66
|
-
const bytes = new TextEncoder().encode(input);
|
|
67
|
-
let hash = FNV_OFFSET;
|
|
68
|
-
for (const byte of bytes) hash = (hash ^ BigInt(byte)) * FNV_PRIME & MASK64;
|
|
69
|
-
return hash.toString(16).padStart(16, "0");
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Fingerprints any JSON-serialisable value through {@link canonicalJson}, so
|
|
73
|
-
* the result depends on the content and not on how it was written.
|
|
74
|
-
*/
|
|
75
|
-
function contentHash(value) {
|
|
76
|
-
return fingerprint(canonicalJson(value));
|
|
77
|
-
}
|
|
78
|
-
//#endregion
|
|
1
|
+
import { A as checkAiCoaching, B as checkAiExplanation, C as createItemGroupDraft, D as AI_COACHING_MAX_TIP_LENGTH, E as validateItemGroupDraft, F as aiExplanationRequest, H as hintRevealsAnswer, I as aiGradeOf, L as aiHintRequest, M as AI_HINT_TYPES, N as AI_TEXT_MAX_LENGTH, O as AI_COACHING_MAX_WORDS, P as aiAllowedByContent, R as aiSupports, S as createInteractiveVideoDraft, T as critiqueItemGroupDraft, U as readAiTextResult, V as checkAiHint, W as AI_MATERIAL_MAX_LENGTH, _ as aiCritiqueRequest, a as checkAiGrading, b as critiqueDraft, c as AI_DRAFTS_MAX_COUNT, d as aiDraftsRequest, f as checkAiDrafts, g as AI_CRITIQUE_MAX_FINDINGS, h as AI_CRITIQUE_MAX_FIELD_LENGTH, i as aiGradingRequest, j as AI_EXPLANATION_TYPES, k as aiCoachingRequest, l as AI_DRAFTS_MAX_REPAIRS, m as interactiveVideoFromDrafts, n as checkAiWritingFeedback, o as AI_WRITING_MAX_CORRECTIONS, p as generateDrafts, r as AI_GRADING_PROBABILITY_TOLERANCE, s as AI_WRITING_MAX_FIELD_LENGTH, t as aiWritingFeedbackRequest, u as aiDraftsRepairRequest, v as checkAiCritique, w as critiqueDrafts, x as validateDraft, y as createDraft, z as buildAiFacts } from "./ai-writing-D8PdhJJz.js";
|
|
2
|
+
import { $ as RedactedScoringError, A as levenshteinDistance, C as READ_ALOUD_MAX_TAKES, I as countWords, Q as DeferredScoringError, S as READ_ALOUD_MAX_SECONDS, T as SPEECH_ASSESSMENT_MAX_WORDS, Z as ActivitySchemaError, a as readSchema, at as DICTATION_MAX_ACCEPTED_TRANSCRIPTS, b as READ_ALOUD_MAX_DIMENSION_WEIGHT, c as dictationType, ct as DICTATION_MAX_TEXT_LENGTH, d as multipleChoiceType, et as UnknownActivityTypeError, f as readAloudType, h as defineActivityType, ht as isBuiltInActivityType, it as dictationReferenceWords, j as matchText, l as fillInTheBlanksType, lt as DICTATION_MAX_TRANSCRIPT_LENGTH, m as guardOf, n as registerActivityType, nt as alignDictation, ot as DICTATION_MAX_EQUIVALENCES, p as writtenResponseType, pt as BUILT_IN_ACTIVITY_TYPES, r as registeredActivityTypes, s as MEDIA_FIELD_POLICY, st as DICTATION_MAX_EQUIVALENCE_LENGTH, t as getActivityTypeDescriptor, u as gapSelectType, x as READ_ALOUD_MAX_REFERENCE_LENGTH } from "./registry-DaZRpqjW.js";
|
|
3
|
+
import { A as DEFAULT_ITEM_SCORING_POLICY, C as contentHash, D as classifyBand, E as computePassThreshold, M as resolveItemScoringPolicy, N as scoreTries, O as gte, P as validateItemScoringPolicy, S as canonicalJson, T as DEFAULT_PASS_THRESHOLD, _ as gradeFromRubric, a as inspectWav, b as calibrationReport, c as validateSpeechAssessment, d as inAuditSample, f as outcomeFromRoutedGrade, g as gradeFromJudgement, h as seededShuffle, i as outcomeFromUnscorable, j as ITEM_SCORING_MAX_RETRIES, k as roundGrade, l as diffDictationChars, m as hashSeed, n as evaluateTries, o as gradeReadAloud, p as routeGrade, r as score, s as alignReadAloud, t as evaluate, u as composeAssessmentScore, v as hasGrade, w as fingerprint, x as graderConfiguration, y as outcomeFromGrade } from "./scoring-BKNNTz-s.js";
|
|
4
|
+
import { a as INTERACTIVE_VIDEO_ITEM_TYPES, c as TIMELINE_MAX_QUIZZES, i as validateItemGroup, l as TIMELINE_MAX_TITLE_LENGTH, n as RedactedItemGroupSchema, o as TIMELINE_MAX_CHAPTERS, s as TIMELINE_MAX_ITEMS, u as isInteractiveVideoItemType } from "./item-group-DdSUCUjM.js";
|
|
5
|
+
import { a as fillInTheBlanksJsonSchema, c as jsonSchemaFor, d as stimulusJsonSchema, f as writtenResponseJsonSchema, i as dictationJsonSchema, l as multipleChoiceJsonSchema, n as validateMedia, o as gapSelectJsonSchema, r as validateOptionMedia, s as itemGroupJsonSchema, t as validateActivity, u as readAloudJsonSchema } from "./schemas-BioKFf3F.js";
|
|
6
|
+
import { a as validateXAPIStatement, i as XAPI_VERB_DISPLAY, n as xapiDefinitionFor, r as XAPIVerb, t as xAPIBuilder } from "./xapi-wR6gu4qS.js";
|
|
79
7
|
//#region src/delivery.ts
|
|
80
8
|
/**
|
|
81
9
|
* The policy that restricts nothing: every setting `true`. It is what an absent
|
|
@@ -231,44 +159,6 @@ function validateDeliveryPolicy(policy) {
|
|
|
231
159
|
};
|
|
232
160
|
}
|
|
233
161
|
//#endregion
|
|
234
|
-
//#region src/shuffle.ts
|
|
235
|
-
/**
|
|
236
|
-
* Seeded, deterministic shuffling — the ONE algorithm every presentation-order
|
|
237
|
-
* decision in the SDK goes through: option order in a multiple-choice item,
|
|
238
|
-
* item order inside an item group, entry order in a sequence. A server and a
|
|
239
|
-
* client holding the same seed derive the same order, and an order recorded
|
|
240
|
-
* against an attempt can be rebuilt later from nothing but its seed.
|
|
241
|
-
*
|
|
242
|
-
* STABILITY: the hash and the generator are part of the wire contract. A
|
|
243
|
-
* stored attempt may hold only a seed and rely on this function to reproduce
|
|
244
|
-
* the order it presented; changing either would silently re-order every
|
|
245
|
-
* recorded attempt. Any change here is a package major, and the pinned
|
|
246
|
-
* permutation test exists so an accidental one fails loudly.
|
|
247
|
-
*/
|
|
248
|
-
/** FNV-1a hash of a string → unsigned 32-bit integer. */
|
|
249
|
-
function hashSeed(input) {
|
|
250
|
-
let h = 2166136261;
|
|
251
|
-
for (let i = 0; i < input.length; i += 1) {
|
|
252
|
-
h ^= input.charCodeAt(i);
|
|
253
|
-
h = Math.imul(h, 16777619) >>> 0;
|
|
254
|
-
}
|
|
255
|
-
return h;
|
|
256
|
-
}
|
|
257
|
-
/** LCG-driven Fisher–Yates over a 32-bit seed; returns a permutation (no loss, no duplicate). */
|
|
258
|
-
function shuffleWithSeed(items, seed, version) {
|
|
259
|
-
const out = [...items];
|
|
260
|
-
let s = seed >>> 0 || 1;
|
|
261
|
-
for (let i = out.length - 1; i > 0; i -= 1) {
|
|
262
|
-
s = Math.imul(s, 1664525) + 1013904223 >>> 0;
|
|
263
|
-
const j = version === 2 ? Math.floor(s / 4294967296 * (i + 1)) : s % (i + 1);
|
|
264
|
-
[out[i], out[j]] = [out[j], out[i]];
|
|
265
|
-
}
|
|
266
|
-
return out;
|
|
267
|
-
}
|
|
268
|
-
function seededShuffle(items, seed, options = {}) {
|
|
269
|
-
return shuffleWithSeed(items, hashSeed(seed), options.version ?? 1);
|
|
270
|
-
}
|
|
271
|
-
//#endregion
|
|
272
162
|
//#region src/item-group.ts
|
|
273
163
|
/** Narrows a sequence entry to an item group. */
|
|
274
164
|
function isItemGroup(entry) {
|
|
@@ -924,6 +814,8 @@ function redactValue(value, policy, reveal) {
|
|
|
924
814
|
if (keepField(classification, reveal)) output[key] = fieldValue;
|
|
925
815
|
continue;
|
|
926
816
|
}
|
|
817
|
+
const guard = guardOf(classification);
|
|
818
|
+
if (guard !== void 0 && !guard(fieldValue)) continue;
|
|
927
819
|
const nested = redactValue(fieldValue, classification, reveal);
|
|
928
820
|
if (nested !== void 0 && !isEmptyObject(nested)) output[key] = nested;
|
|
929
821
|
}
|
|
@@ -1157,6 +1049,6 @@ function composeTimelineScore(entryKey, items, policy) {
|
|
|
1157
1049
|
}], policy);
|
|
1158
1050
|
}
|
|
1159
1051
|
//#endregion
|
|
1160
|
-
export { AI_COACHING_MAX_TIP_LENGTH, AI_COACHING_MAX_WORDS, AI_CRITIQUE_MAX_FIELD_LENGTH, AI_CRITIQUE_MAX_FINDINGS, AI_DRAFTS_MAX_COUNT, AI_DRAFTS_MAX_REPAIRS, AI_EXPLANATION_TYPES, AI_HINT_TYPES, AI_TEXT_MAX_LENGTH, AI_WRITING_MAX_CORRECTIONS, AI_WRITING_MAX_FIELD_LENGTH, ActivitySchemaError, BUILT_IN_ACTIVITY_TYPES, 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, DeferredScoringError, INTERACTIVE_VIDEO_ITEM_TYPES, ITEM_SCORING_MAX_RETRIES, OPEN_DELIVERY_POLICY, READ_ALOUD_MAX_DIMENSION_WEIGHT, READ_ALOUD_MAX_REFERENCE_LENGTH, READ_ALOUD_MAX_SECONDS, READ_ALOUD_MAX_TAKES, RedactedScoringError, SPEECH_ASSESSMENT_MAX_WORDS, TIMELINE_MAX_CHAPTERS, TIMELINE_MAX_ITEMS, TIMELINE_MAX_QUIZZES, TIMELINE_MAX_TITLE_LENGTH, UnknownActivityTypeError, XAPIVerb, XAPI_VERB_DISPLAY, aiAllowedByContent, aiCoachingRequest, aiCritiqueRequest, aiDraftsRepairRequest, aiDraftsRequest, aiExplanationRequest, aiGradeOf, aiHintRequest, aiSupports, aiWritingFeedbackRequest, alignDictation, alignReadAloud, assertRedacted, assertRedactedItemGroup, buildAiFacts, canonicalJson, checkAiCoaching, checkAiCritique, checkAiDrafts, checkAiExplanation, checkAiHint, checkAiWritingFeedback, classifyBand, combineDeliveryPolicies, composeAssessmentScore, composeTimelineScore, computePassThreshold, contentHash, countWords, createDraft, createInteractiveVideoDraft, createItemGroupDraft, critiqueDraft, critiqueDrafts, critiqueItemGroupDraft, defineActivityType, dictationJsonSchema, dictationReferenceWords, dictationType, diffDictationChars, diffResponses, entryKeyOf, evaluate, evaluateTries, fillInTheBlanksJsonSchema, fillInTheBlanksType, fingerprint, flattenSequence, gapSelectJsonSchema, gapSelectType, generateDrafts, getActivityTypeDescriptor, gradeFromRubric, gradeReadAloud, gte, hasGrade, hashSeed, hintRevealsAnswer, inspectWav, interactiveVideoFromDrafts, isBuiltInActivityType, isInteractiveVideoItemType, isItemGroup, itemGroupJsonSchema, jsonSchemaFor, levenshteinDistance, matchText, multipleChoiceJsonSchema, multipleChoiceType, outcomeFromGrade, outcomeFromUnscorable, planAttempt, planMediaBudgets, readAiTextResult, readAloudJsonSchema, readAloudType, readMediaProgress, redact, redactItemGroup, registerActivityType, registeredActivityTypes, resolveDeliveryPolicy, resolveItemScoringPolicy, resolvePlaybackPolicy, restoreAttemptState, restoreMediaPlayLedger, roundGrade, score, scoreTries, scoredItemsFromPlan, seededShuffle, serializeAttemptState, serializeMediaPlayLedger, slotMediaKey, stimulusJsonSchema, stimulusMediaKey, validateActivity, validateDeliveryPolicy, validateDraft, validateItemGroup, validateItemGroupDraft, validateItemScoringPolicy, validateMedia, validateOptionMedia, validateSpeechAssessment, validateXAPIStatement, verifyAttemptPlan, writtenResponseJsonSchema, writtenResponseType, xAPIBuilder, xapiDefinitionFor };
|
|
1052
|
+
export { AI_COACHING_MAX_TIP_LENGTH, AI_COACHING_MAX_WORDS, AI_CRITIQUE_MAX_FIELD_LENGTH, AI_CRITIQUE_MAX_FINDINGS, AI_DRAFTS_MAX_COUNT, AI_DRAFTS_MAX_REPAIRS, AI_EXPLANATION_TYPES, AI_GRADING_PROBABILITY_TOLERANCE, AI_HINT_TYPES, AI_MATERIAL_MAX_LENGTH, AI_TEXT_MAX_LENGTH, AI_WRITING_MAX_CORRECTIONS, AI_WRITING_MAX_FIELD_LENGTH, ActivitySchemaError, BUILT_IN_ACTIVITY_TYPES, 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, DeferredScoringError, INTERACTIVE_VIDEO_ITEM_TYPES, ITEM_SCORING_MAX_RETRIES, OPEN_DELIVERY_POLICY, READ_ALOUD_MAX_DIMENSION_WEIGHT, READ_ALOUD_MAX_REFERENCE_LENGTH, READ_ALOUD_MAX_SECONDS, READ_ALOUD_MAX_TAKES, RedactedScoringError, SPEECH_ASSESSMENT_MAX_WORDS, TIMELINE_MAX_CHAPTERS, TIMELINE_MAX_ITEMS, TIMELINE_MAX_QUIZZES, TIMELINE_MAX_TITLE_LENGTH, UnknownActivityTypeError, XAPIVerb, XAPI_VERB_DISPLAY, aiAllowedByContent, aiCoachingRequest, aiCritiqueRequest, aiDraftsRepairRequest, aiDraftsRequest, aiExplanationRequest, aiGradeOf, aiGradingRequest, aiHintRequest, aiSupports, aiWritingFeedbackRequest, alignDictation, alignReadAloud, assertRedacted, assertRedactedItemGroup, buildAiFacts, calibrationReport, canonicalJson, checkAiCoaching, checkAiCritique, checkAiDrafts, checkAiExplanation, checkAiGrading, checkAiHint, checkAiWritingFeedback, classifyBand, combineDeliveryPolicies, composeAssessmentScore, composeTimelineScore, computePassThreshold, contentHash, countWords, createDraft, createInteractiveVideoDraft, createItemGroupDraft, critiqueDraft, critiqueDrafts, critiqueItemGroupDraft, defineActivityType, dictationJsonSchema, dictationReferenceWords, dictationType, diffDictationChars, diffResponses, entryKeyOf, evaluate, evaluateTries, fillInTheBlanksJsonSchema, fillInTheBlanksType, fingerprint, flattenSequence, gapSelectJsonSchema, gapSelectType, generateDrafts, getActivityTypeDescriptor, gradeFromJudgement, gradeFromRubric, gradeReadAloud, graderConfiguration, gte, hasGrade, hashSeed, hintRevealsAnswer, inAuditSample, inspectWav, interactiveVideoFromDrafts, isBuiltInActivityType, isInteractiveVideoItemType, isItemGroup, itemGroupJsonSchema, jsonSchemaFor, levenshteinDistance, matchText, multipleChoiceJsonSchema, multipleChoiceType, outcomeFromGrade, outcomeFromRoutedGrade, outcomeFromUnscorable, planAttempt, planMediaBudgets, readAiTextResult, readAloudJsonSchema, readAloudType, readMediaProgress, redact, redactItemGroup, registerActivityType, registeredActivityTypes, resolveDeliveryPolicy, resolveItemScoringPolicy, resolvePlaybackPolicy, restoreAttemptState, restoreMediaPlayLedger, roundGrade, routeGrade, score, scoreTries, scoredItemsFromPlan, seededShuffle, serializeAttemptState, serializeMediaPlayLedger, slotMediaKey, stimulusJsonSchema, stimulusMediaKey, validateActivity, validateDeliveryPolicy, validateDraft, validateItemGroup, validateItemGroupDraft, validateItemScoringPolicy, validateMedia, validateOptionMedia, validateSpeechAssessment, validateXAPIStatement, verifyAttemptPlan, writtenResponseJsonSchema, writtenResponseType, xAPIBuilder, xapiDefinitionFor };
|
|
1161
1053
|
|
|
1162
1054
|
//# sourceMappingURL=index.js.map
|