@intellectif/lk-core 1.9.0 → 1.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/ai-check.cjs +2 -2
  3. package/dist/ai-check.js +2 -2
  4. package/dist/{ai-writing-DQjI9EFN.js → ai-writing-BaaiuU5t.js} +3 -3
  5. package/dist/ai-writing-BaaiuU5t.js.map +1 -0
  6. package/dist/{ai-writing-DbpZpGRk.cjs → ai-writing-_wciTWaI.cjs} +3 -3
  7. package/dist/ai-writing-_wciTWaI.cjs.map +1 -0
  8. package/dist/{index-DLsUnGHt.d.cts → index-BBmID0a6.d.cts} +24 -2
  9. package/dist/index-BBmID0a6.d.cts.map +1 -0
  10. package/dist/{index-CxkqS62X.d.ts → index-DGmcCid6.d.ts} +24 -2
  11. package/dist/index-DGmcCid6.d.ts.map +1 -0
  12. package/dist/index.cjs +6 -4
  13. package/dist/index.cjs.map +1 -1
  14. package/dist/index.d.cts +14 -4
  15. package/dist/index.d.cts.map +1 -1
  16. package/dist/index.d.ts +14 -4
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +6 -4
  19. package/dist/index.js.map +1 -1
  20. package/dist/{item-group-COP5OwEC.cjs → item-group-C9boy5Mk.cjs} +13 -4
  21. package/dist/item-group-C9boy5Mk.cjs.map +1 -0
  22. package/dist/{item-group-CKZk3txt.js → item-group-Cqng1LPl.js} +13 -4
  23. package/dist/item-group-Cqng1LPl.js.map +1 -0
  24. package/dist/{schemas-BJe3W6Xb.js → schemas-D14-tnNl.js} +2 -2
  25. package/dist/{schemas-BJe3W6Xb.js.map → schemas-D14-tnNl.js.map} +1 -1
  26. package/dist/{schemas-CXlemRvB.cjs → schemas-DcEAuAeU.cjs} +2 -2
  27. package/dist/{schemas-CXlemRvB.cjs.map → schemas-DcEAuAeU.cjs.map} +1 -1
  28. package/dist/schemas.cjs +2 -2
  29. package/dist/schemas.js +2 -2
  30. package/dist/{scoring-Db1CZeAn.cjs → scoring-Bmfu8RS5.cjs} +48 -16
  31. package/dist/scoring-Bmfu8RS5.cjs.map +1 -0
  32. package/dist/{scoring-BGKdff2i.js → scoring-hMsEMhCU.js} +48 -16
  33. package/dist/scoring-hMsEMhCU.js.map +1 -0
  34. package/dist/scoring.cjs +1 -1
  35. package/dist/scoring.d.cts +1 -1
  36. package/dist/scoring.d.ts +1 -1
  37. package/dist/scoring.js +1 -1
  38. package/package.json +1 -1
  39. package/vectors/scoring.json +248 -1
  40. package/vectors/validation.json +1329 -1
  41. package/vectors/validation.mjs +13 -0
  42. package/dist/ai-writing-DQjI9EFN.js.map +0 -1
  43. package/dist/ai-writing-DbpZpGRk.cjs.map +0 -1
  44. package/dist/index-CxkqS62X.d.ts.map +0 -1
  45. package/dist/index-DLsUnGHt.d.cts.map +0 -1
  46. package/dist/item-group-CKZk3txt.js.map +0 -1
  47. package/dist/item-group-COP5OwEC.cjs.map +0 -1
  48. package/dist/scoring-BGKdff2i.js.map +0 -1
  49. package/dist/scoring-Db1CZeAn.cjs.map +0 -1
package/dist/scoring.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { An as ReadAloudLearnerResponse, Bn as SpeakingResponseLearnerResponse, Dn as ReadAloudData, L as AiGradingJudgement, Nn as RecordingRef, _n as ItemOutcome, _r as TextMatchResult, gr as TextMatchPolicy, sr as GradeRecord, vr as levenshteinDistance, yr as matchText, zn as SpeakingResponseData } from "./ai-zhc9yhRj.js";
2
- import { A as DictationCharOp, At as SpeechWordError, B as inAuditSample, C as scoreTries, Ct as SpeechPhoneme, D as DICTATION_MAX_EQUIVALENCE_LENGTH, Dt as SpeechUnscorable, E as DICTATION_MAX_EQUIVALENCES, Et as SpeechSyllable, F as alignDictation, Ft as RoundingPolicy, G as CalibrationPair, H as routeGrade, I as dictationReferenceWords, It as classifyBand, J as CriterionCalibration, K as CalibrationReport, L as CalibrationThresholds, Lt as gte, M as DictationAlignment, Mt as WavInspectionPolicy, N as DictationReference, Nt as Band, O as DICTATION_MAX_TEXT_LENGTH, Ot as SpeechUnscorableCode, P as DictationWordAlignment, Pt as RoundingMode, R as GradeRoutingContext, Rt as roundGrade, S as resolveItemScoringPolicy, St as SpeechMeasurement, T as DICTATION_MAX_ACCEPTED_TRANSCRIPTS, Tt as SpeechPlausibilityPolicy, U as GradeFromJudgementOptions, V as outcomeFromRoutedGrade, W as gradeFromJudgement, X as calibrationReport, Y as TotalCalibration, Z as graderConfiguration, _ as alignReadAloud, _t as GradeSpeakingResponseOptions, a as evaluateTries, at as ItemTriesScore, b as DEFAULT_ITEM_SCORING_POLICY, bt as SpeakingEvidence, c as inspectWav, ct as ResolvedItemScoringPolicy, d as READ_ALOUD_MAX_SECONDS, dt as CompositionPolicy, f as READ_ALOUD_MAX_TAKES, ft as PassFailureReason, g as validateSpeechAssessment, gt as GradeReadAloudOptions, h as gradeReadAloud, ht as composeAssessmentScore, i as evaluate, it as ItemScoringPolicyIssue, j as diffDictationChars, jt as WavInspection, k as DICTATION_MAX_TRANSCRIPT_LENGTH, kt as SpeechWord, l as READ_ALOUD_MAX_DIMENSION_WEIGHT, lt as AssessmentScore, m as gradeSpeakingResponse, mt as SectionScore, n as ItemTriesOutcome, nt as ItemScoringCount, o as score, ot as ItemTry, p as SPEECH_ASSESSMENT_MAX_WORDS, pt as ScoredItem, q as CalibrationScope, r as ScoringOptions, rt as ItemScoringPolicy, s as outcomeFromUnscorable, st as ItemTryScore, t as EvaluateOptions, u as READ_ALOUD_MAX_REFERENCE_LENGTH, ut as AssessmentSectionInput, v as DEFAULT_PASS_THRESHOLD, vt as ReadAloudWordAlignment, w as validateItemScoringPolicy, wt as SpeechPhonemeCandidate, x as ITEM_SCORING_MAX_RETRIES, xt as SpeechAssessment, y as computePassThreshold, yt as ReadAloudWordState, z as GradeRoutingPolicy } from "./index-CxkqS62X.js";
2
+ import { A as DictationCharOp, At as SpeechWordError, B as inAuditSample, C as scoreTries, Ct as SpeechPhoneme, D as DICTATION_MAX_EQUIVALENCE_LENGTH, Dt as SpeechUnscorable, E as DICTATION_MAX_EQUIVALENCES, Et as SpeechSyllable, F as alignDictation, Ft as RoundingPolicy, G as CalibrationPair, H as routeGrade, I as dictationReferenceWords, It as classifyBand, J as CriterionCalibration, K as CalibrationReport, L as CalibrationThresholds, Lt as gte, M as DictationAlignment, Mt as WavInspectionPolicy, N as DictationReference, Nt as Band, O as DICTATION_MAX_TEXT_LENGTH, Ot as SpeechUnscorableCode, P as DictationWordAlignment, Pt as RoundingMode, R as GradeRoutingContext, Rt as roundGrade, S as resolveItemScoringPolicy, St as SpeechMeasurement, T as DICTATION_MAX_ACCEPTED_TRANSCRIPTS, Tt as SpeechPlausibilityPolicy, U as GradeFromJudgementOptions, V as outcomeFromRoutedGrade, W as gradeFromJudgement, X as calibrationReport, Y as TotalCalibration, Z as graderConfiguration, _ as alignReadAloud, _t as GradeSpeakingResponseOptions, a as evaluateTries, at as ItemTriesScore, b as DEFAULT_ITEM_SCORING_POLICY, bt as SpeakingEvidence, c as inspectWav, ct as ResolvedItemScoringPolicy, d as READ_ALOUD_MAX_SECONDS, dt as CompositionPolicy, f as READ_ALOUD_MAX_TAKES, ft as PassFailureReason, g as validateSpeechAssessment, gt as GradeReadAloudOptions, h as gradeReadAloud, ht as composeAssessmentScore, i as evaluate, it as ItemScoringPolicyIssue, j as diffDictationChars, jt as WavInspection, k as DICTATION_MAX_TRANSCRIPT_LENGTH, kt as SpeechWord, l as READ_ALOUD_MAX_DIMENSION_WEIGHT, lt as AssessmentScore, m as gradeSpeakingResponse, mt as SectionScore, n as ItemTriesOutcome, nt as ItemScoringCount, o as score, ot as ItemTry, p as SPEECH_ASSESSMENT_MAX_WORDS, pt as ScoredItem, q as CalibrationScope, r as ScoringOptions, rt as ItemScoringPolicy, s as outcomeFromUnscorable, st as ItemTryScore, t as EvaluateOptions, u as READ_ALOUD_MAX_REFERENCE_LENGTH, ut as AssessmentSectionInput, v as DEFAULT_PASS_THRESHOLD, vt as ReadAloudWordAlignment, w as validateItemScoringPolicy, wt as SpeechPhonemeCandidate, x as ITEM_SCORING_MAX_RETRIES, xt as SpeechAssessment, y as computePassThreshold, yt as ReadAloudWordState, z as GradeRoutingPolicy } from "./index-DGmcCid6.js";
3
3
  export { type AiGradingJudgement, type AssessmentScore, type AssessmentSectionInput, type Band, type CalibrationPair, type CalibrationReport, type CalibrationScope, type CalibrationThresholds, type CompositionPolicy, type CriterionCalibration, 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 DictationAlignment, type DictationCharOp, type DictationReference, type DictationWordAlignment, EvaluateOptions, type GradeFromJudgementOptions, type GradeReadAloudOptions, type GradeRecord, type GradeRoutingContext, type GradeRoutingPolicy, type GradeSpeakingResponseOptions, ITEM_SCORING_MAX_RETRIES, type ItemOutcome, type ItemScoringCount, type ItemScoringPolicy, type ItemScoringPolicyIssue, ItemTriesOutcome, type ItemTriesScore, type ItemTry, type ItemTryScore, type PassFailureReason, READ_ALOUD_MAX_DIMENSION_WEIGHT, READ_ALOUD_MAX_REFERENCE_LENGTH, READ_ALOUD_MAX_SECONDS, READ_ALOUD_MAX_TAKES, type ReadAloudData, type ReadAloudLearnerResponse, type ReadAloudWordAlignment, type ReadAloudWordState, type RecordingRef, type ResolvedItemScoringPolicy, type RoundingMode, type RoundingPolicy, SPEECH_ASSESSMENT_MAX_WORDS, type ScoredItem, ScoringOptions, type SectionScore, type SpeakingEvidence, type SpeakingResponseData, type SpeakingResponseLearnerResponse, type SpeechAssessment, type SpeechMeasurement, type SpeechPhoneme, type SpeechPhonemeCandidate, type SpeechPlausibilityPolicy, type SpeechSyllable, type SpeechUnscorable, type SpeechUnscorableCode, type SpeechWord, type SpeechWordError, type TextMatchPolicy, type TextMatchResult, type TotalCalibration, type WavInspection, type WavInspectionPolicy, alignDictation, alignReadAloud, calibrationReport, classifyBand, composeAssessmentScore, computePassThreshold, dictationReferenceWords, diffDictationChars, evaluate, evaluateTries, gradeFromJudgement, gradeReadAloud, gradeSpeakingResponse, graderConfiguration, gte, inAuditSample, inspectWav, levenshteinDistance, matchText, outcomeFromRoutedGrade, outcomeFromUnscorable, resolveItemScoringPolicy, roundGrade, routeGrade, score, scoreTries, validateItemScoringPolicy, validateSpeechAssessment };
package/dist/scoring.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import { C as READ_ALOUD_MAX_REFERENCE_LENGTH, D as SPEECH_ASSESSMENT_MAX_WORDS, F as matchText, P as levenshteinDistance, S as READ_ALOUD_MAX_DIMENSION_WEIGHT, T as READ_ALOUD_MAX_TAKES, ct as dictationReferenceWords, dt as DICTATION_MAX_EQUIVALENCE_LENGTH, ft as DICTATION_MAX_TEXT_LENGTH, lt as DICTATION_MAX_ACCEPTED_TRANSCRIPTS, ot as alignDictation, pt as DICTATION_MAX_TRANSCRIPT_LENGTH, ut as DICTATION_MAX_EQUIVALENCES, w as READ_ALOUD_MAX_SECONDS } from "./registry-Bw9grsCN.js";
2
- import { A as roundGrade, D as computePassThreshold, E as DEFAULT_PASS_THRESHOLD, F as validateItemScoringPolicy, M as ITEM_SCORING_MAX_RETRIES, N as resolveItemScoringPolicy, O as classifyBand, P as scoreTries, S as graderConfiguration, _ as gradeFromJudgement, a as inspectWav, c as alignReadAloud, d as composeAssessmentScore, f as inAuditSample, i as outcomeFromUnscorable, j as DEFAULT_ITEM_SCORING_POLICY, k as gte, l as validateSpeechAssessment, m as routeGrade, n as evaluateTries, o as gradeSpeakingResponse, p as outcomeFromRoutedGrade, r as score, s as gradeReadAloud, t as evaluate, u as diffDictationChars, x as calibrationReport } from "./scoring-BGKdff2i.js";
2
+ import { A as roundGrade, D as computePassThreshold, E as DEFAULT_PASS_THRESHOLD, F as validateItemScoringPolicy, M as ITEM_SCORING_MAX_RETRIES, N as resolveItemScoringPolicy, O as classifyBand, P as scoreTries, S as graderConfiguration, _ as gradeFromJudgement, a as inspectWav, c as alignReadAloud, d as composeAssessmentScore, f as inAuditSample, i as outcomeFromUnscorable, j as DEFAULT_ITEM_SCORING_POLICY, k as gte, l as validateSpeechAssessment, m as routeGrade, n as evaluateTries, o as gradeSpeakingResponse, p as outcomeFromRoutedGrade, r as score, s as gradeReadAloud, t as evaluate, u as diffDictationChars, x as calibrationReport } from "./scoring-hMsEMhCU.js";
3
3
  export { 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, ITEM_SCORING_MAX_RETRIES, READ_ALOUD_MAX_DIMENSION_WEIGHT, READ_ALOUD_MAX_REFERENCE_LENGTH, READ_ALOUD_MAX_SECONDS, READ_ALOUD_MAX_TAKES, SPEECH_ASSESSMENT_MAX_WORDS, alignDictation, alignReadAloud, calibrationReport, classifyBand, composeAssessmentScore, computePassThreshold, dictationReferenceWords, diffDictationChars, evaluate, evaluateTries, gradeFromJudgement, gradeReadAloud, gradeSpeakingResponse, graderConfiguration, gte, inAuditSample, inspectWav, levenshteinDistance, matchText, outcomeFromRoutedGrade, outcomeFromUnscorable, resolveItemScoringPolicy, roundGrade, routeGrade, score, scoreTries, validateItemScoringPolicy, validateSpeechAssessment };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intellectif/lk-core",
3
- "version": "1.9.0",
3
+ "version": "1.10.1",
4
4
  "description": "Framework-free assessment core: activity validation, pure scoring, rubric & deferred grading, weighted assessment composition, exam attempt plans, and xAPI 1.0.3. Custom activity types take any Standard Schema.",
5
5
  "keywords": [
6
6
  "assessment",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$comment": "Grade-stability corpus for @intellectif/lk-core. Generated by scripts/generate-vectors.mjs from the built package; never edit expectations by hand. Replay with vectors/replay.mjs. See vectors/README.md.",
3
3
  "corpusVersion": 2,
4
- "frozenFrom": "@intellectif/lk-core@1.8.0",
4
+ "frozenFrom": "@intellectif/lk-core@1.9.0",
5
5
  "vectors": [
6
6
  {
7
7
  "args": [
@@ -9513,6 +9513,253 @@
9513
9513
  "fn": "composeAssessmentScore",
9514
9514
  "id": "composeAssessmentScore/accepted/exact-edge-of-float-noise"
9515
9515
  },
9516
+ {
9517
+ "args": [
9518
+ "video",
9519
+ [
9520
+ {
9521
+ "outcome": {
9522
+ "details": [],
9523
+ "feedback": null,
9524
+ "maxScore": 1,
9525
+ "passed": true,
9526
+ "score": 1,
9527
+ "status": "scored"
9528
+ },
9529
+ "points": 1,
9530
+ "slotId": "video.0"
9531
+ },
9532
+ {
9533
+ "outcome": {
9534
+ "details": [],
9535
+ "feedback": null,
9536
+ "maxScore": 1,
9537
+ "passed": false,
9538
+ "score": 0.5,
9539
+ "status": "scored"
9540
+ },
9541
+ "points": 1,
9542
+ "slotId": "video.1"
9543
+ },
9544
+ {
9545
+ "outcome": {
9546
+ "maxScore": 1,
9547
+ "partial": {
9548
+ "hasRecording": true
9549
+ },
9550
+ "reason": "requires_async_grading",
9551
+ "status": "deferred"
9552
+ },
9553
+ "points": 1,
9554
+ "slotId": "video.2"
9555
+ },
9556
+ {
9557
+ "outcome": {
9558
+ "details": [],
9559
+ "feedback": null,
9560
+ "maxScore": 1,
9561
+ "passed": false,
9562
+ "score": 0,
9563
+ "status": "scored"
9564
+ },
9565
+ "points": 1,
9566
+ "slotId": "other.0"
9567
+ }
9568
+ ],
9569
+ {
9570
+ "passThreshold": 0.7,
9571
+ "rounding": {
9572
+ "dp": 2,
9573
+ "mode": "half-up"
9574
+ }
9575
+ }
9576
+ ],
9577
+ "expect": {
9578
+ "passFailureReason": null,
9579
+ "passed": null,
9580
+ "pendingSlotIds": ["video.2"],
9581
+ "score": 0.75,
9582
+ "sections": [
9583
+ {
9584
+ "appliedThreshold": null,
9585
+ "earnedPoints": 1.5,
9586
+ "gradedMaxPoints": 2,
9587
+ "id": "video",
9588
+ "maxPoints": 3,
9589
+ "normalizedWeight": 1,
9590
+ "passed": true,
9591
+ "pendingSlotIds": ["video.2"],
9592
+ "score": 0.75,
9593
+ "unscorableSlotIds": [],
9594
+ "weight": 1
9595
+ }
9596
+ ],
9597
+ "status": "provisional",
9598
+ "unscorableSlotIds": []
9599
+ },
9600
+ "fn": "composeTimelineScore",
9601
+ "id": "composeTimelineScore/spoken-answer-graded-later-is-provisional",
9602
+ "note": "A spoken answer awaiting its grade holds the video provisional. It is never counted as zero."
9603
+ },
9604
+ {
9605
+ "args": [
9606
+ "video",
9607
+ [
9608
+ {
9609
+ "outcome": {
9610
+ "details": [],
9611
+ "feedback": null,
9612
+ "maxScore": 1,
9613
+ "passed": true,
9614
+ "score": 1,
9615
+ "status": "scored"
9616
+ },
9617
+ "points": 1,
9618
+ "slotId": "video.0"
9619
+ },
9620
+ {
9621
+ "outcome": {
9622
+ "details": [],
9623
+ "feedback": null,
9624
+ "maxScore": 1,
9625
+ "passed": false,
9626
+ "score": 0.5,
9627
+ "status": "scored"
9628
+ },
9629
+ "points": 1,
9630
+ "slotId": "video.1"
9631
+ },
9632
+ {
9633
+ "outcome": {
9634
+ "maxScore": 1,
9635
+ "pendingGrade": {
9636
+ "feedback": null,
9637
+ "maxScore": 1,
9638
+ "passed": false,
9639
+ "score": 0.55
9640
+ },
9641
+ "reason": "awaiting_human_review",
9642
+ "status": "deferred"
9643
+ },
9644
+ "points": 1,
9645
+ "slotId": "video.2"
9646
+ }
9647
+ ],
9648
+ {
9649
+ "passThreshold": 0.7,
9650
+ "rounding": {
9651
+ "dp": 2,
9652
+ "mode": "half-up"
9653
+ }
9654
+ }
9655
+ ],
9656
+ "expect": {
9657
+ "passFailureReason": null,
9658
+ "passed": null,
9659
+ "pendingSlotIds": ["video.2"],
9660
+ "score": 0.75,
9661
+ "sections": [
9662
+ {
9663
+ "appliedThreshold": null,
9664
+ "earnedPoints": 1.5,
9665
+ "gradedMaxPoints": 2,
9666
+ "id": "video",
9667
+ "maxPoints": 3,
9668
+ "normalizedWeight": 1,
9669
+ "passed": true,
9670
+ "pendingSlotIds": ["video.2"],
9671
+ "score": 0.75,
9672
+ "unscorableSlotIds": [],
9673
+ "weight": 1
9674
+ }
9675
+ ],
9676
+ "status": "provisional",
9677
+ "unscorableSlotIds": []
9678
+ },
9679
+ "fn": "composeTimelineScore",
9680
+ "id": "composeTimelineScore/spoken-answer-awaiting-a-person-is-provisional",
9681
+ "note": "A model's grade a routing rule held for a person does not count: the video stays provisional."
9682
+ },
9683
+ {
9684
+ "args": [
9685
+ "video",
9686
+ [
9687
+ {
9688
+ "outcome": {
9689
+ "details": [],
9690
+ "feedback": null,
9691
+ "maxScore": 1,
9692
+ "passed": true,
9693
+ "score": 1,
9694
+ "status": "scored"
9695
+ },
9696
+ "points": 1,
9697
+ "slotId": "video.0"
9698
+ },
9699
+ {
9700
+ "outcome": {
9701
+ "details": [],
9702
+ "feedback": null,
9703
+ "maxScore": 1,
9704
+ "passed": false,
9705
+ "score": 0.5,
9706
+ "status": "scored"
9707
+ },
9708
+ "points": 1,
9709
+ "slotId": "video.1"
9710
+ },
9711
+ {
9712
+ "outcome": {
9713
+ "feedback": null,
9714
+ "grade": {
9715
+ "feedback": null,
9716
+ "maxScore": 1,
9717
+ "passed": true,
9718
+ "score": 0.8
9719
+ },
9720
+ "maxScore": 1,
9721
+ "passed": true,
9722
+ "score": 0.8,
9723
+ "status": "graded"
9724
+ },
9725
+ "points": 1,
9726
+ "slotId": "video.2"
9727
+ }
9728
+ ],
9729
+ {
9730
+ "passThreshold": 0.7,
9731
+ "rounding": {
9732
+ "dp": 2,
9733
+ "mode": "half-up"
9734
+ }
9735
+ }
9736
+ ],
9737
+ "expect": {
9738
+ "passFailureReason": null,
9739
+ "passed": true,
9740
+ "pendingSlotIds": [],
9741
+ "score": 0.77,
9742
+ "sections": [
9743
+ {
9744
+ "appliedThreshold": null,
9745
+ "earnedPoints": 2.3,
9746
+ "gradedMaxPoints": 3,
9747
+ "id": "video",
9748
+ "maxPoints": 3,
9749
+ "normalizedWeight": 1,
9750
+ "passed": true,
9751
+ "pendingSlotIds": [],
9752
+ "score": 0.77,
9753
+ "unscorableSlotIds": [],
9754
+ "weight": 1
9755
+ }
9756
+ ],
9757
+ "status": "final",
9758
+ "unscorableSlotIds": []
9759
+ },
9760
+ "fn": "composeTimelineScore",
9761
+ "id": "composeTimelineScore/spoken-answer-graded-is-final"
9762
+ },
9516
9763
  {
9517
9764
  "args": [
9518
9765
  [