@intellectif/lk-core 1.5.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +77 -0
- package/dist/{ai-BYryFkF9.d.ts → ai-B1wYrqcB.d.cts} +83 -18
- package/dist/ai-B1wYrqcB.d.cts.map +1 -0
- package/dist/{ai-BYryFkF9.d.cts → ai-B1wYrqcB.d.ts} +83 -18
- package/dist/ai-B1wYrqcB.d.ts.map +1 -0
- package/dist/ai-check.cjs +13 -6
- package/dist/ai-check.cjs.map +1 -1
- package/dist/ai-check.d.cts +1 -5
- package/dist/ai-check.d.cts.map +1 -1
- package/dist/ai-check.d.ts +1 -5
- package/dist/ai-check.d.ts.map +1 -1
- package/dist/ai-check.js +13 -6
- package/dist/ai-check.js.map +1 -1
- package/dist/{ai-writing-D8PdhJJz.js → ai-writing-B7oMCt66.js} +311 -66
- package/dist/ai-writing-B7oMCt66.js.map +1 -0
- package/dist/{ai-writing-Cen7-3qs.cjs → ai-writing-DrPTV3R2.cjs} +313 -50
- package/dist/ai-writing-DrPTV3R2.cjs.map +1 -0
- package/dist/{index-DUaW1Tj5.d.ts → index-BM8LeDWn.d.cts} +2 -42
- package/dist/index-BM8LeDWn.d.cts.map +1 -0
- package/dist/{index-Bg0aeWtM.d.cts → index-BTkMQtws.d.ts} +2 -42
- package/dist/index-BTkMQtws.d.ts.map +1 -0
- package/dist/{index-wMc1E_aM.d.ts → index-BU99GFTl.d.ts} +2 -8
- package/dist/index-BU99GFTl.d.ts.map +1 -0
- package/dist/{index-CxpiWedW.d.ts → index-BdXs4-en.d.ts} +42 -20
- package/dist/index-BdXs4-en.d.ts.map +1 -0
- package/dist/{index-qMbxed1B.d.cts → index-DP9rvyOz.d.cts} +42 -20
- package/dist/index-DP9rvyOz.d.cts.map +1 -0
- package/dist/{index-D7R3Ll8R.d.cts → index-XCCoPoTU.d.cts} +2 -8
- package/dist/index-XCCoPoTU.d.cts.map +1 -0
- package/dist/index.cjs +70 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +135 -69
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +135 -69
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +65 -22
- package/dist/index.js.map +1 -1
- package/dist/{item-group-DEB7nLID.cjs → item-group-8P3WFuUK.cjs} +5 -6
- package/dist/item-group-8P3WFuUK.cjs.map +1 -0
- package/dist/{item-group-DdSUCUjM.js → item-group-CeDk7mfM.js} +5 -6
- package/dist/item-group-CeDk7mfM.js.map +1 -0
- package/dist/{registry-DaZRpqjW.js → registry-D92hz9iA.js} +124 -106
- package/dist/registry-D92hz9iA.js.map +1 -0
- package/dist/{registry-Ce00A_OW.cjs → registry-hzrkTeIT.cjs} +142 -107
- package/dist/registry-hzrkTeIT.cjs.map +1 -0
- package/dist/{schemas-DksueYsu.cjs → schemas-BWeskONy.cjs} +79 -18
- package/dist/schemas-BWeskONy.cjs.map +1 -0
- package/dist/{schemas-BioKFf3F.js → schemas-C7TViWCg.js} +74 -19
- package/dist/schemas-C7TViWCg.js.map +1 -0
- package/dist/schemas.cjs +5 -2
- package/dist/schemas.d.cts +2 -2
- package/dist/schemas.d.ts +2 -2
- package/dist/schemas.js +4 -3
- package/dist/{scoring-lKQVYsxy.cjs → scoring-CtkCFyFT.cjs} +22 -42
- package/dist/{scoring-lKQVYsxy.cjs.map → scoring-CtkCFyFT.cjs.map} +1 -1
- package/dist/{scoring-BKNNTz-s.js → scoring-DD1GHcLI.js} +22 -42
- package/dist/{scoring-BKNNTz-s.js.map → scoring-DD1GHcLI.js.map} +1 -1
- package/dist/scoring.cjs +2 -2
- package/dist/scoring.d.cts +2 -2
- package/dist/scoring.d.ts +2 -2
- package/dist/scoring.js +2 -2
- package/dist/{xapi-NYrTlpID.cjs → xapi-7btSpx6v.cjs} +5 -8
- package/dist/{xapi-NYrTlpID.cjs.map → xapi-7btSpx6v.cjs.map} +1 -1
- package/dist/{xapi-wR6gu4qS.js → xapi-Cgicg-zU.js} +5 -8
- package/dist/{xapi-wR6gu4qS.js.map → xapi-Cgicg-zU.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 -1
- package/package.json +2 -2
- package/dist/ai-BYryFkF9.d.cts.map +0 -1
- package/dist/ai-BYryFkF9.d.ts.map +0 -1
- package/dist/ai-writing-Cen7-3qs.cjs.map +0 -1
- package/dist/ai-writing-D8PdhJJz.js.map +0 -1
- package/dist/index-Bg0aeWtM.d.cts.map +0 -1
- package/dist/index-CxpiWedW.d.ts.map +0 -1
- package/dist/index-D7R3Ll8R.d.cts.map +0 -1
- package/dist/index-DUaW1Tj5.d.ts.map +0 -1
- package/dist/index-qMbxed1B.d.cts.map +0 -1
- package/dist/index-wMc1E_aM.d.ts.map +0 -1
- package/dist/item-group-DEB7nLID.cjs.map +0 -1
- package/dist/item-group-DdSUCUjM.js.map +0 -1
- package/dist/registry-Ce00A_OW.cjs.map +0 -1
- package/dist/registry-DaZRpqjW.js.map +0 -1
- package/dist/schemas-BioKFf3F.js.map +0 -1
- package/dist/schemas-DksueYsu.cjs.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { $ as
|
|
1
|
+
import { $ as DeferredScoringError, Dt as maxUnits, F as levelKey, I as readRubricLevels, L as countWords, P as levelDistribution, Q as ActivitySchemaError, T as SPEECH_ASSESSMENT_MAX_WORDS, at as dictationReferenceWords, dt as codePointLength, et as RedactedScoringError, ft as normalizeDictationText, it as alignSequences, nt as STEP, t as getActivityTypeDescriptor, tt as UnknownActivityTypeError, v as ReadAloudDataSchema, w as SPEECH_ASSESSMENT_MAX_TEXT_LENGTH, y as CANONICAL_LOCALE_RE } from "./registry-D92hz9iA.js";
|
|
2
2
|
import * as z from "zod/v4";
|
|
3
|
-
|
|
3
|
+
// src/scoring/grade-numbers.ts
|
|
4
4
|
/**
|
|
5
5
|
* How far past its own maximum a score may sit and still be a grade. A grader
|
|
6
6
|
* that sums weighted parts lands on `1.0000000000000002` for a perfect answer
|
|
@@ -23,8 +23,7 @@ const OVERSHOOT = 1e-9;
|
|
|
23
23
|
function isGradeInRange(score, maxScore) {
|
|
24
24
|
return Number.isFinite(maxScore) && maxScore > 0 && Number.isFinite(score) && score >= 0 && score - maxScore <= maxScore * OVERSHOOT;
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
//#region src/is-redacted.ts
|
|
26
|
+
// src/is-redacted.ts
|
|
28
27
|
/**
|
|
29
28
|
* True when `data` is a `redact()` projection rather than full activity data.
|
|
30
29
|
* Grading a redacted item is always a bug: the answer key is gone by design, so
|
|
@@ -41,8 +40,7 @@ function isGradeInRange(score, maxScore) {
|
|
|
41
40
|
function isRedacted(data) {
|
|
42
41
|
return typeof data === "object" && data !== null && data.redacted === true;
|
|
43
42
|
}
|
|
44
|
-
|
|
45
|
-
//#region src/scoring/item-scoring.ts
|
|
43
|
+
// src/scoring/item-scoring.ts
|
|
46
44
|
/**
|
|
47
45
|
* The policy that changes nothing: one try, nothing costs anything, the first
|
|
48
46
|
* try counts. What an absent policy resolves to, and exactly how questions were
|
|
@@ -213,8 +211,7 @@ function scoreTries(tries, policy) {
|
|
|
213
211
|
tries: scored
|
|
214
212
|
};
|
|
215
213
|
}
|
|
216
|
-
|
|
217
|
-
//#region src/scoring/rounding.ts
|
|
214
|
+
// src/scoring/rounding.ts
|
|
218
215
|
const ROUNDING_MODES = [
|
|
219
216
|
"half-up",
|
|
220
217
|
"half-even",
|
|
@@ -326,8 +323,7 @@ function classifyBand(value, bands) {
|
|
|
326
323
|
for (const band of bands) if (value >= band.min - EPSILON && (best === null || band.min > best.min)) best = band;
|
|
327
324
|
return best;
|
|
328
325
|
}
|
|
329
|
-
|
|
330
|
-
//#region src/scoring/pass-threshold.ts
|
|
326
|
+
// src/scoring/pass-threshold.ts
|
|
331
327
|
/** Default minimum scaled score required to pass when `passThreshold` is absent. */
|
|
332
328
|
const DEFAULT_PASS_THRESHOLD = .7;
|
|
333
329
|
/**
|
|
@@ -357,8 +353,7 @@ function selectFeedback(activityData, passed) {
|
|
|
357
353
|
if (feedback === void 0) return null;
|
|
358
354
|
return (passed ? feedback.correct : feedback.incorrect) ?? null;
|
|
359
355
|
}
|
|
360
|
-
|
|
361
|
-
//#region src/content-hash.ts
|
|
356
|
+
// src/content-hash.ts
|
|
362
357
|
/**
|
|
363
358
|
* Content fingerprinting — "is this the same content the learner was served?"
|
|
364
359
|
*
|
|
@@ -429,8 +424,7 @@ function fingerprint(input) {
|
|
|
429
424
|
function contentHash(value) {
|
|
430
425
|
return fingerprint(canonicalJson(value));
|
|
431
426
|
}
|
|
432
|
-
|
|
433
|
-
//#region src/scoring/assisted/calibration.ts
|
|
427
|
+
// src/scoring/assisted/calibration.ts
|
|
434
428
|
const mean = (values) => values.reduce((sum, value) => sum + value, 0) / values.length;
|
|
435
429
|
/** Population variance. */
|
|
436
430
|
function variance(values) {
|
|
@@ -757,8 +751,7 @@ function calibrationReport(pairs, scope) {
|
|
|
757
751
|
}
|
|
758
752
|
};
|
|
759
753
|
}
|
|
760
|
-
|
|
761
|
-
//#region src/grading.ts
|
|
754
|
+
// src/grading.ts
|
|
762
755
|
/**
|
|
763
756
|
* Computes the weighted total from per-criterion scores — the arithmetic that
|
|
764
757
|
* must NOT be delegated to a language model.
|
|
@@ -884,8 +877,7 @@ function outcomeFromGrade(grade) {
|
|
|
884
877
|
function hasGrade(outcome) {
|
|
885
878
|
return outcome.status === "scored" || outcome.status === "graded";
|
|
886
879
|
}
|
|
887
|
-
|
|
888
|
-
//#region src/scoring/assisted/grade-from-judgement.ts
|
|
880
|
+
// src/scoring/assisted/grade-from-judgement.ts
|
|
889
881
|
/**
|
|
890
882
|
* The grade a checked model judgement gives a written response: the total
|
|
891
883
|
* computed as `gradeFromRubric` computes every grade — never by the model — with
|
|
@@ -951,8 +943,7 @@ function gradeFromJudgement(judgement, data, options = {}) {
|
|
|
951
943
|
...provenance?.generatedAt !== void 0 ? { gradedAt: provenance.generatedAt } : {}
|
|
952
944
|
};
|
|
953
945
|
}
|
|
954
|
-
|
|
955
|
-
//#region src/shuffle.ts
|
|
946
|
+
// src/shuffle.ts
|
|
956
947
|
/**
|
|
957
948
|
* Seeded, deterministic shuffling — the ONE algorithm every presentation-order
|
|
958
949
|
* decision in the SDK goes through: option order in a multiple-choice item,
|
|
@@ -989,8 +980,7 @@ function shuffleWithSeed(items, seed, version) {
|
|
|
989
980
|
function seededShuffle(items, seed, options = {}) {
|
|
990
981
|
return shuffleWithSeed(items, hashSeed(seed), options.version ?? 1);
|
|
991
982
|
}
|
|
992
|
-
|
|
993
|
-
//#region src/scoring/assisted/routing.ts
|
|
983
|
+
// src/scoring/assisted/routing.ts
|
|
994
984
|
/** A threshold the caller configured: a finite number, and a rate within 0 to 1 where it is one. */
|
|
995
985
|
function checkThreshold(name, value, rate) {
|
|
996
986
|
if (value === void 0) return;
|
|
@@ -1138,8 +1128,7 @@ function outcomeFromRoutedGrade(grade, routing) {
|
|
|
1138
1128
|
pendingGrade: routed
|
|
1139
1129
|
};
|
|
1140
1130
|
}
|
|
1141
|
-
|
|
1142
|
-
//#region src/scoring/compose.ts
|
|
1131
|
+
// src/scoring/compose.ts
|
|
1143
1132
|
function earned(item) {
|
|
1144
1133
|
const { outcome } = item;
|
|
1145
1134
|
if (hasGrade(outcome)) {
|
|
@@ -1270,8 +1259,7 @@ function composeAssessmentScore(sections, policy) {
|
|
|
1270
1259
|
unscorableSlotIds: unscorableAll
|
|
1271
1260
|
};
|
|
1272
1261
|
}
|
|
1273
|
-
|
|
1274
|
-
//#region src/scoring/dictation/chars.ts
|
|
1262
|
+
// src/scoring/dictation/chars.ts
|
|
1275
1263
|
/**
|
|
1276
1264
|
* The code-point edit operations between two NORMALISED strings — the
|
|
1277
1265
|
* `reference` and `attempt` of a `DictationAlignment`, or one word pair from
|
|
@@ -1306,8 +1294,7 @@ function diffDictationChars(reference, attempt) {
|
|
|
1306
1294
|
};
|
|
1307
1295
|
});
|
|
1308
1296
|
}
|
|
1309
|
-
|
|
1310
|
-
//#region src/scoring/speech/tokens.ts
|
|
1297
|
+
// src/scoring/speech/tokens.ts
|
|
1311
1298
|
/**
|
|
1312
1299
|
* The normalised tokens of the words that can be marked, each remembering the
|
|
1313
1300
|
* word it came from, up to what {@link SPEECH_ASSESSMENT_MAX_TEXT_LENGTH} code
|
|
@@ -1348,8 +1335,7 @@ function heardTokens(words) {
|
|
|
1348
1335
|
length
|
|
1349
1336
|
};
|
|
1350
1337
|
}
|
|
1351
|
-
|
|
1352
|
-
//#region src/scoring/speech/assessment.ts
|
|
1338
|
+
// src/scoring/speech/assessment.ts
|
|
1353
1339
|
/** A score on the assessment's 0..100 scale. `z.number()` refuses NaN and both infinities. */
|
|
1354
1340
|
const Score = z.number().min(0).max(100);
|
|
1355
1341
|
/** A confidence, 0..1. */
|
|
@@ -1571,8 +1557,7 @@ function validateSpeechAssessment(value) {
|
|
|
1571
1557
|
errors
|
|
1572
1558
|
};
|
|
1573
1559
|
}
|
|
1574
|
-
|
|
1575
|
-
//#region src/scoring/speech/align.ts
|
|
1560
|
+
// src/scoring/speech/align.ts
|
|
1576
1561
|
/**
|
|
1577
1562
|
* The word's accuracy when it has one. Absent means the assessor did not
|
|
1578
1563
|
* measure the word, which is never the same as measuring it at 0.
|
|
@@ -1711,8 +1696,7 @@ function placeInsertions(assessment, entries) {
|
|
|
1711
1696
|
});
|
|
1712
1697
|
});
|
|
1713
1698
|
}
|
|
1714
|
-
|
|
1715
|
-
//#region src/scoring/speech/grade.ts
|
|
1699
|
+
// src/scoring/speech/grade.ts
|
|
1716
1700
|
/**
|
|
1717
1701
|
* The read-aloud grade: the arithmetic over a pronunciation assessment's
|
|
1718
1702
|
* dimension scores, and the checks that decide whether that evidence may be
|
|
@@ -1903,8 +1887,7 @@ function gradeReadAloud(data, response, assessment, options) {
|
|
|
1903
1887
|
function referenceWordsOf(data) {
|
|
1904
1888
|
return dictationReferenceWords({ transcript: data.referenceText })[0];
|
|
1905
1889
|
}
|
|
1906
|
-
|
|
1907
|
-
//#region src/scoring/speech/wav.ts
|
|
1890
|
+
// src/scoring/speech/wav.ts
|
|
1908
1891
|
/** `RIFF` + the file size + `WAVE`, before the first chunk. */
|
|
1909
1892
|
const HEADER_BYTES = 12;
|
|
1910
1893
|
/** A chunk's four-character id and its little-endian size. */
|
|
@@ -2052,8 +2035,7 @@ function inspectWav(bytes, policy) {
|
|
|
2052
2035
|
voicedMs: Math.min(voicedMs, durationMs)
|
|
2053
2036
|
};
|
|
2054
2037
|
}
|
|
2055
|
-
|
|
2056
|
-
//#region src/scoring/unscorable.ts
|
|
2038
|
+
// src/scoring/unscorable.ts
|
|
2057
2039
|
/**
|
|
2058
2040
|
* Lifts a result that cannot be graded — a `SpeechUnscorable` from
|
|
2059
2041
|
* `gradeReadAloud`, or anything else carrying a `code` and a `reason` — into
|
|
@@ -2071,8 +2053,7 @@ function outcomeFromUnscorable(result) {
|
|
|
2071
2053
|
code: result.code
|
|
2072
2054
|
};
|
|
2073
2055
|
}
|
|
2074
|
-
|
|
2075
|
-
//#region src/scoring/index.ts
|
|
2056
|
+
// src/scoring/index.ts
|
|
2076
2057
|
/**
|
|
2077
2058
|
* Scores a learner response against activity data and returns a full
|
|
2078
2059
|
* {@link ScoringResult}.
|
|
@@ -2252,7 +2233,6 @@ function costed(data, opening, graded, rules, rounding) {
|
|
|
2252
2233
|
tries: result.tries
|
|
2253
2234
|
};
|
|
2254
2235
|
}
|
|
2255
|
-
//#endregion
|
|
2256
2236
|
export { DEFAULT_ITEM_SCORING_POLICY as A, contentHash as C, classifyBand as D, computePassThreshold as E, isGradeInRange as F, resolveItemScoringPolicy as M, scoreTries as N, gte as O, validateItemScoringPolicy as P, canonicalJson as S, DEFAULT_PASS_THRESHOLD as T, gradeFromRubric as _, inspectWav as a, calibrationReport as b, validateSpeechAssessment as c, inAuditSample as d, outcomeFromRoutedGrade as f, gradeFromJudgement as g, seededShuffle as h, outcomeFromUnscorable as i, ITEM_SCORING_MAX_RETRIES as j, roundGrade as k, diffDictationChars as l, hashSeed as m, evaluateTries as n, gradeReadAloud as o, routeGrade as p, score as r, alignReadAloud as s, evaluate as t, composeAssessmentScore as u, hasGrade as v, fingerprint as w, graderConfiguration as x, outcomeFromGrade as y };
|
|
2257
2237
|
|
|
2258
|
-
//# sourceMappingURL=scoring-
|
|
2238
|
+
//# sourceMappingURL=scoring-DD1GHcLI.js.map
|