@mailwoman/neural 4.16.1 → 5.0.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/out/address-system.d.ts +4 -5
- package/out/address-system.d.ts.map +1 -1
- package/out/address-system.js +4 -5
- package/out/address-system.js.map +1 -1
- package/out/anchor-inference.d.ts +16 -18
- package/out/anchor-inference.d.ts.map +1 -1
- package/out/anchor-inference.js +16 -18
- package/out/anchor-inference.js.map +1 -1
- package/out/browser.js +1 -1
- package/out/case-normalize.d.ts +13 -8
- package/out/case-normalize.d.ts.map +1 -1
- package/out/case-normalize.js +18 -11
- package/out/case-normalize.js.map +1 -1
- package/out/classifier.d.ts +125 -134
- package/out/classifier.d.ts.map +1 -1
- package/out/classifier.js +46 -49
- package/out/classifier.js.map +1 -1
- package/out/fst-prior.d.ts +19 -21
- package/out/fst-prior.d.ts.map +1 -1
- package/out/fst-prior.js +13 -14
- package/out/fst-prior.js.map +1 -1
- package/out/gazetteer-inference.d.ts +13 -16
- package/out/gazetteer-inference.d.ts.map +1 -1
- package/out/gazetteer-inference.js +13 -16
- package/out/gazetteer-inference.js.map +1 -1
- package/out/index.d.ts +1 -1
- package/out/index.js +1 -1
- package/out/labels.d.ts +9 -10
- package/out/labels.d.ts.map +1 -1
- package/out/labels.js +5 -6
- package/out/labels.js.map +1 -1
- package/out/onnx-runner.d.ts +33 -21
- package/out/onnx-runner.d.ts.map +1 -1
- package/out/onnx-runner.js +39 -19
- package/out/onnx-runner.js.map +1 -1
- package/out/postcode-anchor.d.ts +28 -34
- package/out/postcode-anchor.d.ts.map +1 -1
- package/out/postcode-anchor.js +48 -55
- package/out/postcode-anchor.js.map +1 -1
- package/out/postcode-binary-resolver.d.ts +10 -13
- package/out/postcode-binary-resolver.d.ts.map +1 -1
- package/out/postcode-binary-resolver.js +12 -15
- package/out/postcode-binary-resolver.js.map +1 -1
- package/out/postcode-repair.d.ts +5 -5
- package/out/postcode-repair.d.ts.map +1 -1
- package/out/postcode-repair.js +9 -10
- package/out/postcode-repair.js.map +1 -1
- package/out/proposal-classifier.d.ts +3 -3
- package/out/proposal-classifier.d.ts.map +1 -1
- package/out/proposal-classifier.js.map +1 -1
- package/out/query-shape-prior.d.ts +10 -11
- package/out/query-shape-prior.d.ts.map +1 -1
- package/out/query-shape-prior.js +12 -15
- package/out/query-shape-prior.js.map +1 -1
- package/out/scorer.d.ts +28 -31
- package/out/scorer.d.ts.map +1 -1
- package/out/scorer.js +39 -44
- package/out/scorer.js.map +1 -1
- package/out/soft-features.d.ts +12 -14
- package/out/soft-features.d.ts.map +1 -1
- package/out/soft-features.js +5 -6
- package/out/soft-features.js.map +1 -1
- package/out/span-bridge.d.ts +9 -11
- package/out/span-bridge.d.ts.map +1 -1
- package/out/span-bridge.js +8 -10
- package/out/span-bridge.js.map +1 -1
- package/out/span-proposal-prior.d.ts +13 -15
- package/out/span-proposal-prior.d.ts.map +1 -1
- package/out/span-proposal-prior.js +2 -2
- package/out/span-proposal-prior.js.map +1 -1
- package/out/span-proposer-lexicon.d.ts +2 -3
- package/out/span-proposer-lexicon.d.ts.map +1 -1
- package/out/span-proposer-lexicon.js +9 -10
- package/out/span-proposer-lexicon.js.map +1 -1
- package/out/street-morphology-prior.d.ts +11 -12
- package/out/street-morphology-prior.d.ts.map +1 -1
- package/out/street-morphology-prior.js +8 -9
- package/out/street-morphology-prior.js.map +1 -1
- package/out/tokenizer.d.ts +6 -7
- package/out/tokenizer.d.ts.map +1 -1
- package/out/tokenizer.js +6 -7
- package/out/tokenizer.js.map +1 -1
- package/out/unit-repair.d.ts +2 -2
- package/out/unit-repair.d.ts.map +1 -1
- package/out/unit-repair.js +11 -14
- package/out/unit-repair.js.map +1 -1
- package/out/viterbi.d.ts +13 -13
- package/out/viterbi.d.ts.map +1 -1
- package/out/viterbi.js +12 -12
- package/out/viterbi.js.map +1 -1
- package/out/vitest.config.d.ts.map +1 -1
- package/out/vitest.config.js.map +1 -1
- package/out/weights.d.ts +62 -71
- package/out/weights.d.ts.map +1 -1
- package/out/weights.js +33 -37
- package/out/weights.js.map +1 -1
- package/out/word-consistency.d.ts +4 -4
- package/out/word-consistency.d.ts.map +1 -1
- package/out/word-consistency.js +4 -4
- package/out/word-consistency.js.map +1 -1
- package/package.json +13 -13
package/out/tokenizer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../tokenizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,4EAA4E;AAC5E,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAA;AAmBjC,MAAM,OAAO,kBAAkB;IACO;IAArC,YAAqC,SAAiC;QAAjC,cAAS,GAAT,SAAS,CAAwB;IAAG,CAAC;IAE1E,qFAAqF;IACrF,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,GAAW;QACtC,MAAM,SAAS,GAAG,IAAI,sBAAsB,EAAE,CAAA;QAC9C,MAAM,SAAS,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../tokenizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,4EAA4E;AAC5E,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAA;AAmBjC,MAAM,OAAO,kBAAkB;IACO;IAArC,YAAqC,SAAiC;QAAjC,cAAS,GAAT,SAAS,CAAwB;IAAG,CAAC;IAE1E,qFAAqF;IACrF,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,GAAW;QACtC,MAAM,SAAS,GAAG,IAAI,sBAAsB,EAAE,CAAA;QAC9C,MAAM,SAAS,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAA;QAE3C,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACzC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,SAAiB;QAC1C,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,kBAAkB,CAAC,CAAA;QAC/E,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAA;QAErC,OAAO,kBAAkB,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;IACjE,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,IAAY;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAE1C,MAAM,SAAS,GAAqB,EAAE,CAAA;QACtC,IAAI,MAAM,GAAG,CAAC,CAAA;QAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAE,CAAA;YACxB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;YACvB,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;YACpD,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;YAExE,IAAI,WAAW,EAAE,CAAC;gBACjB,OAAO,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAE,CAAC;oBAAE,MAAM,EAAE,CAAA;YAClE,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,CAAA;YACpB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAA;YACxB,MAAM,GAAG,GAAG,MAAM,CAAA;YAElB,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;QAC1C,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAA;IAClC,CAAC;IAED,oFAAoF;IACpF,MAAM,CAAC,GAA0B;QAChC,MAAM,GAAG,GAAG,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAElE,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAW,CAAA;IAC/C,CAAC;CACD"}
|
package/out/unit-repair.d.ts
CHANGED
|
@@ -35,8 +35,8 @@ export interface RepairResult {
|
|
|
35
35
|
changed: number;
|
|
36
36
|
}
|
|
37
37
|
/**
|
|
38
|
-
* Repair secondary-unit label spans in a decoded token sequence using designator regexes. Returns a
|
|
39
|
-
*
|
|
38
|
+
* Repair secondary-unit label spans in a decoded token sequence using designator regexes. Returns a NEW token array
|
|
39
|
+
* (inputs are not mutated) plus a change count.
|
|
40
40
|
*/
|
|
41
41
|
export declare function repairUnitLabels(text: string, input: readonly DecoderToken[]): RepairResult;
|
|
42
42
|
//# sourceMappingURL=unit-repair.d.ts.map
|
package/out/unit-repair.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unit-repair.d.ts","sourceRoot":"","sources":["../unit-repair.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAiF3D,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,YAAY,EAAE,CAAA;IACtB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"unit-repair.d.ts","sourceRoot":"","sources":["../unit-repair.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAiF3D,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,YAAY,EAAE,CAAA;IACtB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,YAAY,CAsD3F"}
|
package/out/unit-repair.js
CHANGED
|
@@ -29,10 +29,9 @@
|
|
|
29
29
|
* +135/0; unit-repair stays opt-in until the v0.7.2 arena re-run quantifies its delta).
|
|
30
30
|
*/
|
|
31
31
|
/**
|
|
32
|
-
* Secondary-unit shape patterns, ordered most-specific → least. Case-insensitive (unit designators
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* swallow following words.
|
|
32
|
+
* Secondary-unit shape patterns, ordered most-specific → least. Case-insensitive (unit designators appear in every
|
|
33
|
+
* casing in real data). The identifier is a 1-5 digit number with an optional trailing letter ("4B"), a single letter
|
|
34
|
+
* ("STE D"), or a letter+digits — kept tight so we don't swallow following words.
|
|
36
35
|
*/
|
|
37
36
|
const UNIT_DESIGNATORS = "APARTMENT|APT|SUITE|STE|UNIT|ROOM|RM|FLOOR|FLR|FL|BUILDING|BLDG|DEPARTMENT|DEPT|LOT|TRAILER|TRLR|SLIP|HANGAR|PIER|FLAT|PH|PENTHOUSE";
|
|
38
37
|
const UNIT_PATTERNS = [
|
|
@@ -53,14 +52,12 @@ const UNIT_B = "B-unit";
|
|
|
53
52
|
const UNIT_I = "I-unit";
|
|
54
53
|
const OUTSIDE = "O";
|
|
55
54
|
/**
|
|
56
|
-
* Tags a unit span is allowed to overwrite on the ADD path. The v0.7.2 arena showed the dominant
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* region, country, venue) stay off the list so a confident parse is never clobbered. (`O` is always
|
|
63
|
-
* eligible.)
|
|
55
|
+
* Tags a unit span is allowed to overwrite on the ADD path. The v0.7.2 arena showed the dominant failure for bare
|
|
56
|
+
* designator-led units ("Flat 2 14 Smith St", "APT 2 …") is the model labeling the WHOLE designator+identifier run as
|
|
57
|
+
* `locality` — not leaving it `O`. An explicit designator + identifier is a high-confidence "this is a unit" shape (a
|
|
58
|
+
* real locality/suburb name never has that form), so — exactly like postcode-repair's ADD_OVER_TAGS — we let it reclaim
|
|
59
|
+
* a `locality`/`dependent_locality` span. Structural tags (house_number, street*, postcode, po_box, region, country,
|
|
60
|
+
* venue) stay off the list so a confident parse is never clobbered. (`O` is always eligible.)
|
|
64
61
|
*/
|
|
65
62
|
const ADD_OVER_TAGS = new Set(["locality", "dependent_locality"]);
|
|
66
63
|
function isUnitLabel(label) {
|
|
@@ -90,8 +87,8 @@ function collectMatches(text) {
|
|
|
90
87
|
return accepted;
|
|
91
88
|
}
|
|
92
89
|
/**
|
|
93
|
-
* Repair secondary-unit label spans in a decoded token sequence using designator regexes. Returns a
|
|
94
|
-
*
|
|
90
|
+
* Repair secondary-unit label spans in a decoded token sequence using designator regexes. Returns a NEW token array
|
|
91
|
+
* (inputs are not mutated) plus a change count.
|
|
95
92
|
*/
|
|
96
93
|
export function repairUnitLabels(text, input) {
|
|
97
94
|
const matches = collectMatches(text);
|
package/out/unit-repair.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unit-repair.js","sourceRoot":"","sources":["../unit-repair.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAYH
|
|
1
|
+
{"version":3,"file":"unit-repair.js","sourceRoot":"","sources":["../unit-repair.ts"],"names":[],"mappings":"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"}
|
package/out/viterbi.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* Two transition matrix modes:
|
|
13
13
|
*
|
|
14
14
|
* 1. **Structural-only** (no weights changes required) — build from the BIO label vocabulary using
|
|
15
|
-
* `
|
|
15
|
+
* `buildBIOTransitionMask()`. Forbids `O → I-X`, `B-X → I-Y` (X ≠ Y), and sequence-start →
|
|
16
16
|
* `I-X`. Permits everything else. This alone prevents orphan-I decoding ("Saint Petersburg →
|
|
17
17
|
* Petersburg" bug) at runtime — a strict improvement over argmax.
|
|
18
18
|
* 2. **Learned** (requires a future weights release that ships `crf-transitions.json`) — load the
|
|
@@ -28,21 +28,21 @@
|
|
|
28
28
|
* - `X → B-Y` always permitted (0)
|
|
29
29
|
* - `X → I-Y` permitted only if `X` is `B-Y` or `I-Y` (0); otherwise -inf
|
|
30
30
|
*
|
|
31
|
-
* Returns a `numLabels × numLabels` matrix where `mask[from][to]` is the additive log-score (0 for
|
|
32
|
-
*
|
|
31
|
+
* Returns a `numLabels × numLabels` matrix where `mask[from][to]` is the additive log-score (0 for permitted, NEG_INF
|
|
32
|
+
* for forbidden).
|
|
33
33
|
*/
|
|
34
|
-
export declare function
|
|
34
|
+
export declare function buildBIOTransitionMask(labels: readonly string[]): number[][];
|
|
35
35
|
/** Returns the per-label vector of valid start-of-sequence transitions (0 or -inf). */
|
|
36
|
-
export declare function
|
|
36
|
+
export declare function buildBIOStartMask(labels: readonly string[]): number[];
|
|
37
37
|
/**
|
|
38
|
-
* End-of-sequence transitions. By default all labels are valid endings (returns zeros). Override if
|
|
39
|
-
*
|
|
38
|
+
* End-of-sequence transitions. By default all labels are valid endings (returns zeros). Override if the trained model
|
|
39
|
+
* has learned end transitions.
|
|
40
40
|
*/
|
|
41
|
-
export declare function
|
|
41
|
+
export declare function buildBIOEndMask(labels: readonly string[]): number[];
|
|
42
42
|
export interface ViterbiInput {
|
|
43
43
|
/** `emissions[t][k]` — log-emission for label k at timestep t. Pass raw logits or log-softmaxes. */
|
|
44
44
|
emissions: number[][];
|
|
45
|
-
/** `transitions[from][to]` — additive log-score. Use `
|
|
45
|
+
/** `transitions[from][to]` — additive log-score. Use `buildBIOTransitionMask` if unsure. */
|
|
46
46
|
transitions: number[][];
|
|
47
47
|
/** Per-label log-score for being the FIRST label. */
|
|
48
48
|
startTransitions?: number[];
|
|
@@ -62,15 +62,15 @@ export interface ViterbiResult {
|
|
|
62
62
|
*/
|
|
63
63
|
export declare function viterbi(input: ViterbiInput): ViterbiResult;
|
|
64
64
|
/**
|
|
65
|
-
* Convenience: argmax over per-token softmax (existing behavior). Provided so callers can opt in to
|
|
66
|
-
*
|
|
65
|
+
* Convenience: argmax over per-token softmax (existing behavior). Provided so callers can opt in to Viterbi only when
|
|
66
|
+
* transitions are available, falling back to this cleanly.
|
|
67
67
|
*/
|
|
68
68
|
export declare function perTokenArgmax(emissions: readonly number[][]): number[];
|
|
69
69
|
/**
|
|
70
70
|
* Softmax of a logit row (returns probabilities summing to 1).
|
|
71
71
|
*
|
|
72
|
-
* Used to compute per-token confidence after Viterbi picks the label sequence — the confidence is
|
|
73
|
-
*
|
|
72
|
+
* Used to compute per-token confidence after Viterbi picks the label sequence — the confidence is the softmax
|
|
73
|
+
* probability of the Viterbi-chosen label at that timestep.
|
|
74
74
|
*/
|
|
75
75
|
export declare function softmax(row: readonly number[]): number[];
|
|
76
76
|
//# sourceMappingURL=viterbi.d.ts.map
|
package/out/viterbi.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viterbi.d.ts","sourceRoot":"","sources":["../viterbi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"viterbi.d.ts","sourceRoot":"","sources":["../viterbi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAgB5E;AAED,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAErE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAEnE;AAgBD,MAAM,WAAW,YAAY;IAC5B,oGAAoG;IACpG,SAAS,EAAE,MAAM,EAAE,EAAE,CAAA;IACrB,4FAA4F;IAC5F,WAAW,EAAE,MAAM,EAAE,EAAE,CAAA;IACvB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,aAAa;IAC7B,qCAAqC;IACrC,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAA;CACb;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAoE1D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,CAcvE;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAQxD"}
|
package/out/viterbi.js
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* Two transition matrix modes:
|
|
13
13
|
*
|
|
14
14
|
* 1. **Structural-only** (no weights changes required) — build from the BIO label vocabulary using
|
|
15
|
-
* `
|
|
15
|
+
* `buildBIOTransitionMask()`. Forbids `O → I-X`, `B-X → I-Y` (X ≠ Y), and sequence-start →
|
|
16
16
|
* `I-X`. Permits everything else. This alone prevents orphan-I decoding ("Saint Petersburg →
|
|
17
17
|
* Petersburg" bug) at runtime — a strict improvement over argmax.
|
|
18
18
|
* 2. **Learned** (requires a future weights release that ships `crf-transitions.json`) — load the
|
|
@@ -29,10 +29,10 @@ const NEG_INF = -1e9;
|
|
|
29
29
|
* - `X → B-Y` always permitted (0)
|
|
30
30
|
* - `X → I-Y` permitted only if `X` is `B-Y` or `I-Y` (0); otherwise -inf
|
|
31
31
|
*
|
|
32
|
-
* Returns a `numLabels × numLabels` matrix where `mask[from][to]` is the additive log-score (0 for
|
|
33
|
-
*
|
|
32
|
+
* Returns a `numLabels × numLabels` matrix where `mask[from][to]` is the additive log-score (0 for permitted, NEG_INF
|
|
33
|
+
* for forbidden).
|
|
34
34
|
*/
|
|
35
|
-
export function
|
|
35
|
+
export function buildBIOTransitionMask(labels) {
|
|
36
36
|
const n = labels.length;
|
|
37
37
|
const mask = [];
|
|
38
38
|
for (let from = 0; from < n; from++) {
|
|
@@ -47,14 +47,14 @@ export function buildBioTransitionMask(labels) {
|
|
|
47
47
|
return mask;
|
|
48
48
|
}
|
|
49
49
|
/** Returns the per-label vector of valid start-of-sequence transitions (0 or -inf). */
|
|
50
|
-
export function
|
|
50
|
+
export function buildBIOStartMask(labels) {
|
|
51
51
|
return labels.map((l) => (l.startsWith("I-") ? NEG_INF : 0));
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
|
-
* End-of-sequence transitions. By default all labels are valid endings (returns zeros). Override if
|
|
55
|
-
*
|
|
54
|
+
* End-of-sequence transitions. By default all labels are valid endings (returns zeros). Override if the trained model
|
|
55
|
+
* has learned end transitions.
|
|
56
56
|
*/
|
|
57
|
-
export function
|
|
57
|
+
export function buildBIOEndMask(labels) {
|
|
58
58
|
return labels.map(() => 0);
|
|
59
59
|
}
|
|
60
60
|
function isValidTransition(from, to) {
|
|
@@ -129,8 +129,8 @@ export function viterbi(input) {
|
|
|
129
129
|
return { path, score: bestEndScore };
|
|
130
130
|
}
|
|
131
131
|
/**
|
|
132
|
-
* Convenience: argmax over per-token softmax (existing behavior). Provided so callers can opt in to
|
|
133
|
-
*
|
|
132
|
+
* Convenience: argmax over per-token softmax (existing behavior). Provided so callers can opt in to Viterbi only when
|
|
133
|
+
* transitions are available, falling back to this cleanly.
|
|
134
134
|
*/
|
|
135
135
|
export function perTokenArgmax(emissions) {
|
|
136
136
|
return emissions.map((row) => {
|
|
@@ -148,8 +148,8 @@ export function perTokenArgmax(emissions) {
|
|
|
148
148
|
/**
|
|
149
149
|
* Softmax of a logit row (returns probabilities summing to 1).
|
|
150
150
|
*
|
|
151
|
-
* Used to compute per-token confidence after Viterbi picks the label sequence — the confidence is
|
|
152
|
-
*
|
|
151
|
+
* Used to compute per-token confidence after Viterbi picks the label sequence — the confidence is the softmax
|
|
152
|
+
* probability of the Viterbi-chosen label at that timestep.
|
|
153
153
|
*/
|
|
154
154
|
export function softmax(row) {
|
|
155
155
|
let max = row[0];
|
package/out/viterbi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viterbi.js","sourceRoot":"","sources":["../viterbi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,OAAO,GAAG,CAAC,GAAG,CAAA;AAEpB;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAyB;IAC/D,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAA;IACvB,MAAM,IAAI,GAAe,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"viterbi.js","sourceRoot":"","sources":["../viterbi.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;;
|
|
1
|
+
{"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;;AAYH,wBAoBE"}
|
package/out/vitest.config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,gGAAgG;AAChG,mGAAmG;AACnG,8FAA8F;AAC9F,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAEzD,eAAe,YAAY,CAAC;IAC3B,OAAO,EAAE;QACR,KAAK,EAAE;YACN,+EAA+E;YAC/E,0EAA0E;YAC1E;gBACC,IAAI,EAAE,0CAA0C;gBAChD,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,qCAAqC,CAAC;aACjE;YACD,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,qBAAqB,CAAC,EAAE;YACvF,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAAE;YAC9E,sFAAsF;YACtF,EAAE,IAAI,EAAE,2BAA2B,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,sBAAsB,CAAC,EAAE;YACzF,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE;SAChF;KACD;IACD,IAAI,EAAE;QACL,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,CAAC,oBAAoB,EAAE,WAAW,EAAE,YAAY,CAAC;KAC1D;CACD,CAAC,CAAA"}
|
package/out/weights.d.ts
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*
|
|
17
17
|
* 1. Pass explicit `modelPath` + `tokenizerPath` to `loadFromWeights`, or
|
|
18
18
|
* 2. Symlink the dev model files into the weights package directory — see
|
|
19
|
-
* `scripts/link-dev-weights.
|
|
19
|
+
* `scripts/link-dev-weights.ts` in each weights package.
|
|
20
20
|
*
|
|
21
21
|
* The resolver checks for both files and throws a single actionable error when neither is findable,
|
|
22
22
|
* naming all the paths it tried.
|
|
@@ -29,17 +29,16 @@ export interface ResolveWeightsOpts {
|
|
|
29
29
|
/** Explicit tokenizer.model path; takes precedence over package auto-resolve. */
|
|
30
30
|
tokenizerPath?: string;
|
|
31
31
|
/**
|
|
32
|
-
* Explicit `model-card.json` path (for the label vocab) on the explicit model+tokenizer path.
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* checkpoint via explicit paths.
|
|
32
|
+
* Explicit `model-card.json` path (for the label vocab) on the explicit model+tokenizer path. When omitted, falls
|
|
33
|
+
* back to a `model-card.json` co-located with `modelPath`. Without a card, labels default to `STAGE2_BIO_LABELS` —
|
|
34
|
+
* which silently mis-decodes a STAGE3 (33-label) model into empty/garbage parses. Pass this (or co-locate the card)
|
|
35
|
+
* when evaluating a custom STAGE3 checkpoint via explicit paths.
|
|
37
36
|
*/
|
|
38
37
|
modelCardPath?: string;
|
|
39
38
|
/**
|
|
40
|
-
* Serving tier (#718 D1). `"server"` (default) = anchor + gazetteer channels; `"pocket"` =
|
|
41
|
-
*
|
|
42
|
-
*
|
|
39
|
+
* Serving tier (#718 D1). `"server"` (default) = anchor + gazetteer channels; `"pocket"` = anchor-only (skip the
|
|
40
|
+
* gazetteer lexicon even when shipped). Selects which soft-feature sibling artifacts {@link resolveWeights} surfaces —
|
|
41
|
+
* the loader feeds only the resolved channels.
|
|
43
42
|
*/
|
|
44
43
|
tier?: "server" | "pocket";
|
|
45
44
|
}
|
|
@@ -47,35 +46,32 @@ export interface ResolvedWeights {
|
|
|
47
46
|
modelPath: string;
|
|
48
47
|
tokenizerPath: string;
|
|
49
48
|
/**
|
|
50
|
-
* Path to `model-card.json` for the resolved model. On the package path, the card co-located in
|
|
51
|
-
* the
|
|
52
|
-
*
|
|
53
|
-
*
|
|
49
|
+
* Path to `model-card.json` for the resolved model. On the package path, the card co-located in the package dir. On
|
|
50
|
+
* the explicit path, `opts.modelCardPath` or a card co-located with `modelPath`. `undefined` only when no card is
|
|
51
|
+
* found. Read by `loadFromWeights` to thread the trained label vocabulary into the classifier — see
|
|
52
|
+
* {@link readLabelsFromModelCard}.
|
|
54
53
|
*/
|
|
55
54
|
modelCardPath?: string;
|
|
56
55
|
/**
|
|
57
|
-
* Path to `crf-transitions.json` alongside the resolved model. `undefined` when the file doesn't
|
|
58
|
-
*
|
|
56
|
+
* Path to `crf-transitions.json` alongside the resolved model. `undefined` when the file doesn't exist (pre-v0.6.0
|
|
57
|
+
* bundles or CE-only training).
|
|
59
58
|
*/
|
|
60
59
|
crfTransitionsPath?: string;
|
|
61
60
|
/**
|
|
62
|
-
* Path to the postcode→anchor source shipped beside the resolved model (#718 D1) — the soft-feed
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* `
|
|
66
|
-
*
|
|
67
|
-
* bundle) — the loader then runs anchor-OFF. The `binary` flag tells the loader which parser to
|
|
68
|
-
* use.
|
|
61
|
+
* Path to the postcode→anchor source shipped beside the resolved model (#718 D1) — the soft-feed `loadFromWeights`
|
|
62
|
+
* reads to feed the anchor channel without a callsite change. Prefer the compact PCB1 binary (`postcode-<cc>.bin`,
|
|
63
|
+
* decoded via `PostcodeBinaryResolver.toAnchorLookup()`), else a JSON anchor lookup (`anchor-lookup.json`, parsed via
|
|
64
|
+
* `parseAnchorLookup`). `undefined` when the package ships neither (a plain/pre-#718 bundle) — the loader then runs
|
|
65
|
+
* anchor-OFF. The `binary` flag tells the loader which parser to use.
|
|
69
66
|
*/
|
|
70
67
|
anchorLookupPath?: {
|
|
71
68
|
path: string;
|
|
72
69
|
binary: boolean;
|
|
73
70
|
};
|
|
74
71
|
/**
|
|
75
|
-
* Path to the gazetteer-anchor lexicon (`anchor-lexicon-v1.json`, #464) shipped beside the
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
* `loadFromWeights` soft-feed via `parseGazetteerLexicon`.
|
|
72
|
+
* Path to the gazetteer-anchor lexicon (`anchor-lexicon-v1.json`, #464) shipped beside the resolved model.
|
|
73
|
+
* `undefined` when the package doesn't ship it, OR when `opts.tier === "pocket"` (pocket is anchor-only — the
|
|
74
|
+
* gazetteer channel is deliberately skipped). Read by the `loadFromWeights` soft-feed via `parseGazetteerLexicon`.
|
|
79
75
|
*/
|
|
80
76
|
gazetteerLexiconPath?: string;
|
|
81
77
|
/** "explicit" if both paths came from opts; "package:<name>" if resolved via require.resolve. */
|
|
@@ -83,22 +79,20 @@ export interface ResolvedWeights {
|
|
|
83
79
|
}
|
|
84
80
|
export declare function resolveWeights(opts: ResolveWeightsOpts): ResolvedWeights;
|
|
85
81
|
/**
|
|
86
|
-
* Read the `labels` array from a `model-card.json` file. Returns `undefined` when the file is
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
* matches that default by construction).
|
|
82
|
+
* Read the `labels` array from a `model-card.json` file. Returns `undefined` when the file is missing, unreadable,
|
|
83
|
+
* malformed, or has no `labels` field — callers should fall back to their compile-time default in that case (the loader
|
|
84
|
+
* contract: the JS-side default tracks the most recent shipped stage, so a card without `labels` is always a pre-v0.4.0
|
|
85
|
+
* card whose label vocab matches that default by construction).
|
|
91
86
|
*
|
|
92
|
-
* Validates shape: must be a non-empty array of strings. Throws on a present-but-malformed `labels`
|
|
93
|
-
*
|
|
94
|
-
*
|
|
87
|
+
* Validates shape: must be a non-empty array of strings. Throws on a present-but-malformed `labels` field — a card that
|
|
88
|
+
* emits e.g. `labels: 21` rather than `labels: [...]` is a corrupted artifact and should be loud, not silently
|
|
89
|
+
* re-defaulted.
|
|
95
90
|
*/
|
|
96
91
|
export declare function readLabelsFromModelCard(modelCardPath: string | undefined): readonly string[] | undefined;
|
|
97
92
|
/**
|
|
98
|
-
* The structured `requires` block of a `model-card.json` (#718) — the declared SHIP-CONFIG the
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
* missing channel means "not declared" (treated as not-required).
|
|
93
|
+
* The structured `requires` block of a `model-card.json` (#718) — the declared SHIP-CONFIG the model was trained
|
|
94
|
+
* against. The ProductionScorer reads this and FAILS CLOSED when a declared channel isn't actually fed (silent OOD is
|
|
95
|
+
* the #566/#685 trap). Each channel is optional; a missing channel means "not declared" (treated as not-required).
|
|
102
96
|
*/
|
|
103
97
|
export interface RequiredChannels {
|
|
104
98
|
/** Postcode-anchor channel (#239/#240). */
|
|
@@ -122,28 +116,27 @@ export interface RequiredChannels {
|
|
|
122
116
|
suppress_gazetteer_near_postcode?: boolean;
|
|
123
117
|
}
|
|
124
118
|
/**
|
|
125
|
-
* Read the structured `requires` block from a `model-card.json` (#718). DEFENSIVE: returns
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
119
|
+
* Read the structured `requires` block from a `model-card.json` (#718). DEFENSIVE: returns `undefined` when the card is
|
|
120
|
+
* absent, unreadable, or has no `requires` field (callers then INFER the required channels from the ONNX graph — see
|
|
121
|
+
* `inferRequiredChannelsFromInputs`). Throws ONLY when the field is PRESENT but corrupt (not an object, or a channel
|
|
122
|
+
* entry with a non-boolean `required`) — a malformed declared contract is a loud artifact bug, not a silent
|
|
123
|
+
* re-default.
|
|
130
124
|
*/
|
|
131
125
|
export declare function readRequiredChannels(modelCardPath: string | undefined): RequiredChannels | undefined;
|
|
132
126
|
/**
|
|
133
|
-
* Back-compat inference of the required soft-feature channels from an ONNX model's declared input
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
* NOT graph-observable (no dedicated input), so they're left undeclared here — only the card
|
|
127
|
+
* Back-compat inference of the required soft-feature channels from an ONNX model's declared input names (#718). A model
|
|
128
|
+
* that exports `anchor_features` / `gazetteer_features` declared those channels mandatory at train time — feeding zeros
|
|
129
|
+
* is the channel-off identity, but a model TRAINED with the channel is OOD when scored without it. Cards without a
|
|
130
|
+
* `requires` block (every pre-#718 bundle) route through here so the fail-closed guard still protects them.
|
|
131
|
+
* Conventions/bridge are NOT graph-observable (no dedicated input), so they're left undeclared here — only the card
|
|
139
132
|
* declares them.
|
|
140
133
|
*/
|
|
141
134
|
export declare function inferRequiredChannelsFromInputs(inputNames: readonly string[]): RequiredChannels;
|
|
142
135
|
/**
|
|
143
|
-
* One tag's certified capability under a (tier × address-system) cell of the capability manifest
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
136
|
+
* One tag's certified capability under a (tier × address-system) cell of the capability manifest (#718/#719).
|
|
137
|
+
* `maskOffF1` is the model's measured per-tag exact-match F1 with the conventions mask OFF; `maskOnF1` is the same with
|
|
138
|
+
* the mask ON — recorded ONLY for tags some codex `forbiddenTags` row suppresses, because that's the only place the
|
|
139
|
+
* loader's delta-gate consults it.
|
|
147
140
|
*/
|
|
148
141
|
export interface TagCapability {
|
|
149
142
|
/** Measured per-tag F1 (percent) with the conventions mask OFF — the model's real capability. */
|
|
@@ -152,29 +145,27 @@ export interface TagCapability {
|
|
|
152
145
|
maskOnF1?: number;
|
|
153
146
|
}
|
|
154
147
|
/**
|
|
155
|
-
* The `capabilities` block of a `model-card.json` (#718/#719): per serving TIER (`server` =
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
* makes the D2/#719 bug-class (a mask destroying a demonstrated capability) impossible.
|
|
148
|
+
* The `capabilities` block of a `model-card.json` (#718/#719): per serving TIER (`server` = anchor+gazetteer; `pocket`
|
|
149
|
+
* = anchor-only) × per codex address-system × per tag, the model's certified per-tag capability. The `createScorer`
|
|
150
|
+
* loader reads this to FAIL CLOSED when a conventions mask would forbid a tag the model is certified to emit — the
|
|
151
|
+
* structural fix that makes the D2/#719 bug-class (a mask destroying a demonstrated capability) impossible.
|
|
160
152
|
*
|
|
161
|
-
* Shape: `capabilities[tier][system][tag] = { maskOffF1, maskOnF1? }`. A `$comment` provenance key
|
|
162
|
-
*
|
|
153
|
+
* Shape: `capabilities[tier][system][tag] = { maskOffF1, maskOnF1? }`. A `$comment` provenance key may sit alongside
|
|
154
|
+
* the tier keys and is ignored by readers.
|
|
163
155
|
*/
|
|
164
156
|
export type CapabilityManifest = Record<string, Record<string, Record<string, TagCapability>>>;
|
|
165
157
|
/**
|
|
166
|
-
* Read the `capabilities` block from a `model-card.json` (#718/#719). DEFENSIVE, mirroring
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
* yields no capability claim — `undefined` from `lookupTagCapability`).
|
|
158
|
+
* Read the `capabilities` block from a `model-card.json` (#718/#719). DEFENSIVE, mirroring `readRequiredChannels`:
|
|
159
|
+
* returns `undefined` when the card is absent, unreadable, or has no `capabilities` field (a pre-#718 card → the
|
|
160
|
+
* loader's delta-gate is skipped, back-compat). Throws ONLY when the field is PRESENT but not an object — a corrupt
|
|
161
|
+
* declared contract is a loud artifact bug, not a silent skip. Tier/system/tag sub-shapes are read leniently (a
|
|
162
|
+
* malformed cell simply yields no capability claim — `undefined` from `lookupTagCapability`).
|
|
172
163
|
*/
|
|
173
164
|
export declare function readCapabilityManifest(modelCardPath: string | undefined): CapabilityManifest | undefined;
|
|
174
165
|
/**
|
|
175
|
-
* Resolve `capabilities[tier][system][tag]` to a `TagCapability`, returning `undefined` for any
|
|
176
|
-
*
|
|
177
|
-
*
|
|
166
|
+
* Resolve `capabilities[tier][system][tag]` to a `TagCapability`, returning `undefined` for any missing/malformed cell
|
|
167
|
+
* (a tag the model is NOT certified for — the loader treats that as legal: the model can't emit it, so a mask can't
|
|
168
|
+
* destroy it). Skips the `$comment` provenance key.
|
|
178
169
|
*/
|
|
179
170
|
export declare function lookupTagCapability(manifest: CapabilityManifest | undefined, tier: string, system: string, tag: string): TagCapability | undefined;
|
|
180
171
|
export interface CrfTransitions {
|
|
@@ -183,8 +174,8 @@ export interface CrfTransitions {
|
|
|
183
174
|
endTransitions: number[];
|
|
184
175
|
}
|
|
185
176
|
/**
|
|
186
|
-
* Read learned CRF transition parameters from `crf-transitions.json`. Returns `undefined` when the
|
|
187
|
-
*
|
|
177
|
+
* Read learned CRF transition parameters from `crf-transitions.json`. Returns `undefined` when the file is missing or
|
|
178
|
+
* malformed — callers fall back to the structural BIO mask only.
|
|
188
179
|
*/
|
|
189
180
|
export declare function readCrfTransitions(crfPath: string | undefined): CrfTransitions | undefined;
|
|
190
181
|
//# sourceMappingURL=weights.d.ts.map
|
package/out/weights.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weights.d.ts","sourceRoot":"","sources":["../weights.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAQH,MAAM,WAAW,kBAAkB;IAClC,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB
|
|
1
|
+
{"version":3,"file":"weights.d.ts","sourceRoot":"","sources":["../weights.ts"],"names":[],"mappings":"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"}
|