@mailwoman/neural 4.9.0 → 4.11.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/README.md +102 -0
- package/out/browser.d.ts +1 -0
- package/out/browser.d.ts.map +1 -1
- package/out/browser.js +5 -0
- package/out/browser.js.map +1 -1
- package/out/case-normalize.d.ts +34 -0
- package/out/case-normalize.d.ts.map +1 -0
- package/out/case-normalize.js +50 -0
- package/out/case-normalize.js.map +1 -0
- package/out/classifier.d.ts +24 -2
- package/out/classifier.d.ts.map +1 -1
- package/out/classifier.js +123 -23
- package/out/classifier.js.map +1 -1
- package/out/index.d.ts +2 -0
- package/out/index.d.ts.map +1 -1
- package/out/index.js +2 -0
- package/out/index.js.map +1 -1
- package/out/onnx-runner.d.ts +7 -0
- package/out/onnx-runner.d.ts.map +1 -1
- package/out/onnx-runner.js +10 -0
- package/out/onnx-runner.js.map +1 -1
- package/out/postcode-repair.d.ts +17 -0
- package/out/postcode-repair.d.ts.map +1 -1
- package/out/postcode-repair.js +48 -0
- package/out/postcode-repair.js.map +1 -1
- package/out/scorer.d.ts +105 -0
- package/out/scorer.d.ts.map +1 -0
- package/out/scorer.js +286 -0
- package/out/scorer.js.map +1 -0
- package/out/soft-features.d.ts +67 -0
- package/out/soft-features.d.ts.map +1 -0
- package/out/soft-features.js +49 -0
- package/out/soft-features.js.map +1 -0
- package/out/weights.d.ts +109 -0
- package/out/weights.d.ts.map +1 -1
- package/out/weights.js +157 -1
- package/out/weights.js.map +1 -1
- package/out/word-consistency.d.ts +60 -0
- package/out/word-consistency.d.ts.map +1 -0
- package/out/word-consistency.js +140 -0
- package/out/word-consistency.js.map +1 -0
- package/package.json +5 -3
package/out/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,uBAAuB,CAAA;AACrC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,0BAA0B,CAAA;AACxC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAE/E,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,OAAO,EACN,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,OAAO,EACP,OAAO,GACP,MAAM,cAAc,CAAA;AAErB,cAAc,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,uBAAuB,CAAA;AACrC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,0BAA0B,CAAA;AACxC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAE/E,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,OAAO,EACN,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,cAAc,EACd,OAAO,EACP,OAAO,GACP,MAAM,cAAc,CAAA;AAErB,cAAc,cAAc,CAAA"}
|
package/out/onnx-runner.d.ts
CHANGED
|
@@ -68,5 +68,12 @@ export declare class OnnxRunner {
|
|
|
68
68
|
features: ReadonlyArray<ReadonlyArray<number>>;
|
|
69
69
|
confidence: ReadonlyArray<number>;
|
|
70
70
|
}): Promise<InferResult>;
|
|
71
|
+
/**
|
|
72
|
+
* The model's declared input names (loads the session if not already loaded). Used by the
|
|
73
|
+
* ProductionScorer (#718) back-compat path: when a model-card has no `requires` block, the
|
|
74
|
+
* required soft-feature channels are INFERRED from the graph — a model exporting
|
|
75
|
+
* `anchor_features` / `gazetteer_features` declared those channels mandatory at train time.
|
|
76
|
+
*/
|
|
77
|
+
inputNames(): Promise<readonly string[]>;
|
|
71
78
|
}
|
|
72
79
|
//# sourceMappingURL=onnx-runner.d.ts.map
|
package/out/onnx-runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onnx-runner.d.ts","sourceRoot":"","sources":["../onnx-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,MAAM,WAAW,cAAc;IAC9B,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,8FAA8F;AAC9F,eAAO,MAAM,qBAAqB,MAAM,CAAA;AAExC,MAAM,WAAW,WAAW;IAC3B,2EAA2E;IAC3E,MAAM,EAAE,MAAM,EAAE,EAAE,CAAA;IAClB,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,qBAAa,UAAU;IAMrB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAN5B,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,WAAW,CAA6C;IAChE,SAAgB,WAAW,EAAE,MAAM,CAAA;IAEnC,OAAO;IAQP,oEAAoE;WACvD,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IAMtF,6CAA6C;WAChC,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;YAMhF,aAAa;IAgB3B;;;;;;;;;;;OAWG;IACG,KAAK,CACV,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;KAAE,EAC9F,SAAS,CAAC,EAAE;QAAE,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;KAAE,GAC/F,OAAO,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"onnx-runner.d.ts","sourceRoot":"","sources":["../onnx-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,MAAM,WAAW,cAAc;IAC9B,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,8FAA8F;AAC9F,eAAO,MAAM,qBAAqB,MAAM,CAAA;AAExC,MAAM,WAAW,WAAW;IAC3B,2EAA2E;IAC3E,MAAM,EAAE,MAAM,EAAE,EAAE,CAAA;IAClB,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,qBAAa,UAAU;IAMrB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAN5B,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,WAAW,CAA6C;IAChE,SAAgB,WAAW,EAAE,MAAM,CAAA;IAEnC,OAAO;IAQP,oEAAoE;WACvD,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;IAMtF,6CAA6C;WAChC,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,UAAU,CAAC;YAMhF,aAAa;IAgB3B;;;;;;;;;;;OAWG;IACG,KAAK,CACV,QAAQ,EAAE,MAAM,EAAE,EAClB,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;KAAE,EAC9F,SAAS,CAAC,EAAE;QAAE,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;KAAE,GAC/F,OAAO,CAAC,WAAW,CAAC;IAkFvB;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;CAI9C"}
|
package/out/onnx-runner.js
CHANGED
|
@@ -153,5 +153,15 @@ export class OnnxRunner {
|
|
|
153
153
|
const localeLogits = localeTensor ? Array.from(localeTensor.data) : undefined;
|
|
154
154
|
return { logits, numLabels, ...(localeLogits ? { localeLogits } : {}) };
|
|
155
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* The model's declared input names (loads the session if not already loaded). Used by the
|
|
158
|
+
* ProductionScorer (#718) back-compat path: when a model-card has no `requires` block, the
|
|
159
|
+
* required soft-feature channels are INFERRED from the graph — a model exporting
|
|
160
|
+
* `anchor_features` / `gazetteer_features` declared those channels mandatory at train time.
|
|
161
|
+
*/
|
|
162
|
+
async inputNames() {
|
|
163
|
+
const session = await this.ensureSession();
|
|
164
|
+
return session.inputNames;
|
|
165
|
+
}
|
|
156
166
|
}
|
|
157
167
|
//# sourceMappingURL=onnx-runner.js.map
|
package/out/onnx-runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onnx-runner.js","sourceRoot":"","sources":["../onnx-runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"onnx-runner.js","sourceRoot":"","sources":["../onnx-runner.ts"],"names":[],"mappings":"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"}
|
package/out/postcode-repair.d.ts
CHANGED
|
@@ -62,4 +62,21 @@ export interface RepairResult {
|
|
|
62
62
|
* token array (inputs are not mutated) plus a change count.
|
|
63
63
|
*/
|
|
64
64
|
export declare function repairPostcodeLabels(text: string, input: readonly DecoderToken[]): RepairResult;
|
|
65
|
+
/**
|
|
66
|
+
* US leading-house-number repair (#723, admin-tail diagnostic). The model reads a big rural house
|
|
67
|
+
* number as a ZIP and labels it `postcode` ("24588 Outback Trl, Hermosa SD" → [postcode] "24588",
|
|
68
|
+
* no house_number) — so the situs key loses its number and the row falls back to the admin centroid
|
|
69
|
+
* (~3.8pts of the 12% US admin tail).
|
|
70
|
+
*
|
|
71
|
+
* When a bare 5-digit `postcode` span LEADS the address, no `house_number` was decoded, and a
|
|
72
|
+
* `street` follows it, relabel that span to `house_number`. A trailing postcode (if any) is
|
|
73
|
+
* untouched.
|
|
74
|
+
*
|
|
75
|
+
* **US ONLY — the caller MUST gate this on the detected address system === "us".** A leading
|
|
76
|
+
* 5-digit before a street is a _postcode_ in reversed-order FR ("75008 Rue de la Paix", the #560
|
|
77
|
+
* shard), so applying it outside US would re-break FR reversed-order house numbers. The "a street
|
|
78
|
+
* follows" check is a second guard (FR/DE postcode-first puts a LOCALITY after the leading 5-digit,
|
|
79
|
+
* "08523 Plauen"), but the locale gate is the load-bearing one.
|
|
80
|
+
*/
|
|
81
|
+
export declare function repairLeadingHouseNumber(text: string, input: readonly DecoderToken[]): RepairResult;
|
|
65
82
|
//# sourceMappingURL=postcode-repair.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postcode-repair.d.ts","sourceRoot":"","sources":["../postcode-repair.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE3D,qFAAqF;AACrF,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,+EAA+E;IAC/E,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;IACzB,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAiB7F,CAAA;AA0BD,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAkB5D;AAED,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,YAAY,EAAE,CAAA;IACtB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,YAAY,CAmE/F"}
|
|
1
|
+
{"version":3,"file":"postcode-repair.d.ts","sourceRoot":"","sources":["../postcode-repair.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE3D,qFAAqF;AACrF,MAAM,WAAW,aAAa;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,+EAA+E;IAC/E,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;IACzB,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAiB7F,CAAA;AA0BD,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAkB5D;AAED,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,YAAY,EAAE,CAAA;IACtB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,YAAY,CAmE/F;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,YAAY,CA0BnG"}
|
package/out/postcode-repair.js
CHANGED
|
@@ -168,4 +168,52 @@ export function repairPostcodeLabels(text, input) {
|
|
|
168
168
|
}
|
|
169
169
|
return { tokens, changed };
|
|
170
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* US leading-house-number repair (#723, admin-tail diagnostic). The model reads a big rural house
|
|
173
|
+
* number as a ZIP and labels it `postcode` ("24588 Outback Trl, Hermosa SD" → [postcode] "24588",
|
|
174
|
+
* no house_number) — so the situs key loses its number and the row falls back to the admin centroid
|
|
175
|
+
* (~3.8pts of the 12% US admin tail).
|
|
176
|
+
*
|
|
177
|
+
* When a bare 5-digit `postcode` span LEADS the address, no `house_number` was decoded, and a
|
|
178
|
+
* `street` follows it, relabel that span to `house_number`. A trailing postcode (if any) is
|
|
179
|
+
* untouched.
|
|
180
|
+
*
|
|
181
|
+
* **US ONLY — the caller MUST gate this on the detected address system === "us".** A leading
|
|
182
|
+
* 5-digit before a street is a _postcode_ in reversed-order FR ("75008 Rue de la Paix", the #560
|
|
183
|
+
* shard), so applying it outside US would re-break FR reversed-order house numbers. The "a street
|
|
184
|
+
* follows" check is a second guard (FR/DE postcode-first puts a LOCALITY after the leading 5-digit,
|
|
185
|
+
* "08523 Plauen"), but the locale gate is the load-bearing one.
|
|
186
|
+
*/
|
|
187
|
+
export function repairLeadingHouseNumber(text, input) {
|
|
188
|
+
const tokens = input.map((t) => ({ ...t }));
|
|
189
|
+
// The model already placed a house number — leave the postcode alone.
|
|
190
|
+
if (tokens.some((t) => tagOf(t.label) === "house_number"))
|
|
191
|
+
return { tokens, changed: 0 };
|
|
192
|
+
// The first contiguous postcode run.
|
|
193
|
+
const first = tokens.findIndex((t) => isPostcodeLabel(t.label));
|
|
194
|
+
if (first === -1)
|
|
195
|
+
return { tokens, changed: 0 };
|
|
196
|
+
const run = [first];
|
|
197
|
+
for (let i = first + 1; i < tokens.length && isPostcodeLabel(tokens[i].label); i++)
|
|
198
|
+
run.push(i);
|
|
199
|
+
// It must be a bare 5-digit (the rural-house-number-as-ZIP shape) — not ZIP+4 or alphanumeric.
|
|
200
|
+
const spanEnd = tokens[run[run.length - 1]].end;
|
|
201
|
+
if (!/^\d{5}$/.test(text.slice(tokens[first].start, spanEnd).trim()))
|
|
202
|
+
return { tokens, changed: 0 };
|
|
203
|
+
// A street must FOLLOW the leading number (the house-number position). Rejects the postcode-first
|
|
204
|
+
// "5-digit + locality" shape; the US gate already rejects FR reversed-order.
|
|
205
|
+
const street = tokens.find((t) => tagOf(t.label) === "street");
|
|
206
|
+
if (!street || street.start < spanEnd)
|
|
207
|
+
return { tokens, changed: 0 };
|
|
208
|
+
// Relabel the leading postcode run → house_number.
|
|
209
|
+
let changed = 0;
|
|
210
|
+
run.forEach((i, k) => {
|
|
211
|
+
const label = (k === 0 ? "B-house_number" : "I-house_number");
|
|
212
|
+
if (tokens[i].label !== label) {
|
|
213
|
+
tokens[i].label = label;
|
|
214
|
+
changed++;
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
return { tokens, changed };
|
|
218
|
+
}
|
|
171
219
|
//# sourceMappingURL=postcode-repair.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postcode-repair.js","sourceRoot":"","sources":["../postcode-repair.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"postcode-repair.js","sourceRoot":"","sources":["../postcode-repair.ts"],"names":[],"mappings":"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"}
|
package/out/scorer.d.ts
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* The canonical ProductionScorer (#718) — the ONE place that constructs a `NeuralAddressClassifier`
|
|
7
|
+
* the way the SHIPPED model expects to be fed. Every eval, harness, and (eventually) the serving
|
|
8
|
+
* path should route through here instead of re-deriving the anchor/gazetteer/conventions feed
|
|
9
|
+
* from per-script flags. The history this closes: the #566/#685 trap — a model TRAINED with a
|
|
10
|
+
* channel, scored WITHOUT it, silently goes out-of-distribution and the eval grades a handicapped
|
|
11
|
+
* model. The flat per-script construction (`score-country-homograph.ts`, `per-locale-f1.ts`) each
|
|
12
|
+
* re-invented the feed and each could silently drop a channel.
|
|
13
|
+
*
|
|
14
|
+
* The fix: the model-card declares its required channels (`requires` block — see
|
|
15
|
+
* `readRequiredChannels`), and `createScorer` FAILS CLOSED when a declared channel isn't actually
|
|
16
|
+
* fed. Deliberate ablations are still legal — pass an explicit `override` and the scorer warns
|
|
17
|
+
* loudly instead of throwing (silent OOD is the bug, not the ablation).
|
|
18
|
+
*
|
|
19
|
+
* **Node-only.** Reads the model card, anchor lookup, and gazetteer lexicon from disk and
|
|
20
|
+
* constructs the `OnnxRunner` (onnxruntime-node). Subpath `./scorer`; never import from the
|
|
21
|
+
* browser bundle.
|
|
22
|
+
*/
|
|
23
|
+
import { NeuralAddressClassifier } from "./classifier.js";
|
|
24
|
+
/**
|
|
25
|
+
* Delta threshold for the capability-manifest gate (#718/#719): a conventions row may forbid a tag
|
|
26
|
+
* only if the mask does NOT provably destroy a real capability — i.e. `maskOffF1 − maskOnF1 ≤ 5pp`.
|
|
27
|
+
* A DELTA, not an absolute floor: a tag the model emits at 0.80 is protected if the mask drops it
|
|
28
|
+
* to 0.0, but a tag the mask leaves intact (small/zero delta) is legal regardless of its absolute
|
|
29
|
+
* F1.
|
|
30
|
+
*/
|
|
31
|
+
export declare const CAPABILITY_DELTA_THRESHOLD = 0.05;
|
|
32
|
+
/** Default postcode→anchor lookup (the pilot lookup the shipped en-us model trained against). */
|
|
33
|
+
export declare const DEFAULT_ANCHOR_LOOKUP = "/mnt/playpen/mailwoman-data/anchor/pilot-anchor-lookup.json";
|
|
34
|
+
/** Default gazetteer-anchor lexicon (codex-generated, repo-relative). */
|
|
35
|
+
export declare const DEFAULT_GAZETTEER_LEXICON = "data/gazetteer/anchor-lexicon-v1.json";
|
|
36
|
+
/**
|
|
37
|
+
* Per-channel overrides for a deliberate, DECLARED ablation. Setting any of these to a value
|
|
38
|
+
* diverts the scorer from the model-card's declared SHIP-CONFIG; the scorer honors it but emits a
|
|
39
|
+
* loud `console.error` warning (a stated ablation is legal — silent OOD is not, #566/#685).
|
|
40
|
+
*/
|
|
41
|
+
export interface ScorerOverrides {
|
|
42
|
+
/** `false` to ablate the anchor channel even when the card declares it required. */
|
|
43
|
+
anchor?: boolean;
|
|
44
|
+
/** `false` to ablate the gazetteer channel even when the card declares it required. */
|
|
45
|
+
gazetteer?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Pin / disable the conventions mode (`"auto"` | a `SystemCode` | `false` to disable) regardless
|
|
48
|
+
* of the card's declaration.
|
|
49
|
+
*/
|
|
50
|
+
conventions?: "auto" | string | false;
|
|
51
|
+
/** Override the bridge declaration. */
|
|
52
|
+
bridge?: boolean;
|
|
53
|
+
/** Override the near-postcode gazetteer choreography. */
|
|
54
|
+
suppressGazetteerNearPostcode?: boolean;
|
|
55
|
+
}
|
|
56
|
+
export interface CreateScorerOpts {
|
|
57
|
+
/** Path to the `model.onnx`. */
|
|
58
|
+
modelPath: string;
|
|
59
|
+
/** Path to the `tokenizer.model`. */
|
|
60
|
+
tokenizerPath: string;
|
|
61
|
+
/** Path to the `model-card.json` (label vocab + the `requires` ship-config). */
|
|
62
|
+
modelCardPath: string;
|
|
63
|
+
/**
|
|
64
|
+
* Postcode→anchor lookup path. Default {@link DEFAULT_ANCHOR_LOOKUP} when it exists, else the
|
|
65
|
+
* soft-feed sibling shipped in the `@mailwoman/neural-weights-<locale>` package (#718 D1).
|
|
66
|
+
*/
|
|
67
|
+
anchorLookupPath?: string;
|
|
68
|
+
/**
|
|
69
|
+
* Gazetteer-anchor lexicon path. Default {@link DEFAULT_GAZETTEER_LEXICON} when it exists, else
|
|
70
|
+
* the soft-feed sibling shipped in the weights package (#718 D1).
|
|
71
|
+
*/
|
|
72
|
+
gazetteerLexiconPath?: string;
|
|
73
|
+
/**
|
|
74
|
+
* Locale tag (e.g. `"en-us"`) used to resolve the weights-package soft-feed siblings when the
|
|
75
|
+
* default `/mnt` / repo-relative paths are absent (#718 D1). Only consulted for that fallback;
|
|
76
|
+
* the model/tokenizer/card are always explicit on this path.
|
|
77
|
+
*/
|
|
78
|
+
locale?: string;
|
|
79
|
+
/**
|
|
80
|
+
* Fail CLOSED (throw) when the model-card declares a channel required but it isn't actually fed.
|
|
81
|
+
* Default `true`. Set `false` only for throwaway debugging — a below-config scorer is the trap
|
|
82
|
+
* this module exists to catch.
|
|
83
|
+
*/
|
|
84
|
+
strict?: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Serving tier whose certified capabilities the load-time delta-gate (#718/#719) reads from the
|
|
87
|
+
* card's `capabilities` block: `"server"` (anchor+gazetteer — the production default) or
|
|
88
|
+
* `"pocket"` (anchor-only). Default `"server"`. A tier the card doesn't certify → the gate has no
|
|
89
|
+
* capability claims to consult and is a no-op (legal).
|
|
90
|
+
*/
|
|
91
|
+
tier?: string;
|
|
92
|
+
/** Deliberate, DECLARED ablations (warn-not-throw). See {@link ScorerOverrides}. */
|
|
93
|
+
overrides?: ScorerOverrides;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Construct a `NeuralAddressClassifier` wired to the model-card's declared SHIP-CONFIG (anchor +
|
|
97
|
+
* gazetteer + conventions + bridge + near-postcode suppression), failing closed in `strict` mode
|
|
98
|
+
* when a declared channel can't actually be fed.
|
|
99
|
+
*
|
|
100
|
+
* Resolution of "what's required": the card's `requires` block when present; otherwise INFERRED
|
|
101
|
+
* from the ONNX graph's input names (back-compat for every pre-#718 bundle). Explicit `overrides`
|
|
102
|
+
* divert from the declaration with a loud warning rather than a throw.
|
|
103
|
+
*/
|
|
104
|
+
export declare function createScorer(opts: CreateScorerOpts): Promise<NeuralAddressClassifier>;
|
|
105
|
+
//# sourceMappingURL=scorer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scorer.d.ts","sourceRoot":"","sources":["../scorer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAOH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAezD;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,OAAO,CAAA;AAE9C,iGAAiG;AACjG,eAAO,MAAM,qBAAqB,gEAAgE,CAAA;AAElG,yEAAyE;AACzE,eAAO,MAAM,yBAAyB,0CAA0C,CAAA;AAuChF;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC/B,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,uFAAuF;IACvF,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAA;IACrC,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,yDAAyD;IACzD,6BAA6B,CAAC,EAAE,OAAO,CAAA;CACvC;AAED,MAAM,WAAW,gBAAgB;IAChC,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAA;IACrB,gFAAgF;IAChF,aAAa,EAAE,MAAM,CAAA;IACrB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oFAAoF;IACpF,SAAS,CAAC,EAAE,eAAe,CAAA;CAC3B;AAgFD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAsI3F"}
|
package/out/scorer.js
ADDED
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* The canonical ProductionScorer (#718) — the ONE place that constructs a `NeuralAddressClassifier`
|
|
7
|
+
* the way the SHIPPED model expects to be fed. Every eval, harness, and (eventually) the serving
|
|
8
|
+
* path should route through here instead of re-deriving the anchor/gazetteer/conventions feed
|
|
9
|
+
* from per-script flags. The history this closes: the #566/#685 trap — a model TRAINED with a
|
|
10
|
+
* channel, scored WITHOUT it, silently goes out-of-distribution and the eval grades a handicapped
|
|
11
|
+
* model. The flat per-script construction (`score-country-homograph.ts`, `per-locale-f1.ts`) each
|
|
12
|
+
* re-invented the feed and each could silently drop a channel.
|
|
13
|
+
*
|
|
14
|
+
* The fix: the model-card declares its required channels (`requires` block — see
|
|
15
|
+
* `readRequiredChannels`), and `createScorer` FAILS CLOSED when a declared channel isn't actually
|
|
16
|
+
* fed. Deliberate ablations are still legal — pass an explicit `override` and the scorer warns
|
|
17
|
+
* loudly instead of throwing (silent OOD is the bug, not the ablation).
|
|
18
|
+
*
|
|
19
|
+
* **Node-only.** Reads the model card, anchor lookup, and gazetteer lexicon from disk and
|
|
20
|
+
* constructs the `OnnxRunner` (onnxruntime-node). Subpath `./scorer`; never import from the
|
|
21
|
+
* browser bundle.
|
|
22
|
+
*/
|
|
23
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
24
|
+
import { ADDRESS_SYSTEM_CONVENTIONS } from "@mailwoman/codex";
|
|
25
|
+
import { parseAnchorLookup } from "./anchor-inference.js";
|
|
26
|
+
import { NeuralAddressClassifier } from "./classifier.js";
|
|
27
|
+
import { parseGazetteerLexicon } from "./gazetteer-inference.js";
|
|
28
|
+
import { OnnxRunner } from "./onnx-runner.js";
|
|
29
|
+
import { PostcodeBinaryResolver } from "./postcode-binary-resolver.js";
|
|
30
|
+
import { MailwomanTokenizer } from "./tokenizer.js";
|
|
31
|
+
import { inferRequiredChannelsFromInputs, lookupTagCapability, readCapabilityManifest, readLabelsFromModelCard, readRequiredChannels, resolveWeights, } from "./weights.js";
|
|
32
|
+
/**
|
|
33
|
+
* Delta threshold for the capability-manifest gate (#718/#719): a conventions row may forbid a tag
|
|
34
|
+
* only if the mask does NOT provably destroy a real capability — i.e. `maskOffF1 − maskOnF1 ≤ 5pp`.
|
|
35
|
+
* A DELTA, not an absolute floor: a tag the model emits at 0.80 is protected if the mask drops it
|
|
36
|
+
* to 0.0, but a tag the mask leaves intact (small/zero delta) is legal regardless of its absolute
|
|
37
|
+
* F1.
|
|
38
|
+
*/
|
|
39
|
+
export const CAPABILITY_DELTA_THRESHOLD = 0.05;
|
|
40
|
+
/** Default postcode→anchor lookup (the pilot lookup the shipped en-us model trained against). */
|
|
41
|
+
export const DEFAULT_ANCHOR_LOOKUP = "/mnt/playpen/mailwoman-data/anchor/pilot-anchor-lookup.json";
|
|
42
|
+
/** Default gazetteer-anchor lexicon (codex-generated, repo-relative). */
|
|
43
|
+
export const DEFAULT_GAZETTEER_LEXICON = "data/gazetteer/anchor-lexicon-v1.json";
|
|
44
|
+
/**
|
|
45
|
+
* Resolve the anchor lookup source the scorer feeds when the caller passes no `anchorLookupPath`
|
|
46
|
+
* (#718 D1): prefer the operator's local pilot JSON (the eval's historical default — unchanged when
|
|
47
|
+
* present), else fall back to the soft-feed sibling the weights package SHIPS (`postcode-<cc>.bin`
|
|
48
|
+
* / `anchor-lookup.json`), so eval + serving read the SAME artifact. Returns `undefined` when
|
|
49
|
+
* neither exists (the scorer then fails closed on a declared-required anchor, as before).
|
|
50
|
+
*/
|
|
51
|
+
function defaultAnchorSource(locale) {
|
|
52
|
+
if (existsSync(DEFAULT_ANCHOR_LOOKUP))
|
|
53
|
+
return { path: DEFAULT_ANCHOR_LOOKUP, binary: false };
|
|
54
|
+
try {
|
|
55
|
+
return resolveWeights({ locale }).anchorLookupPath;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Resolve the gazetteer lexicon path the scorer feeds when the caller passes no
|
|
63
|
+
* `gazetteerLexiconPath` (#718 D1): prefer the repo-relative codex lexicon (the eval default —
|
|
64
|
+
* unchanged when present), else the soft-feed sibling shipped in the weights package.
|
|
65
|
+
*/
|
|
66
|
+
function defaultGazetteerLexicon(locale) {
|
|
67
|
+
if (existsSync(DEFAULT_GAZETTEER_LEXICON))
|
|
68
|
+
return DEFAULT_GAZETTEER_LEXICON;
|
|
69
|
+
try {
|
|
70
|
+
return resolveWeights({ locale }).gazetteerLexiconPath;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** Load an `AnchorLookup` from either a PCB1 binary or a JSON pilot lookup (#718 D1). */
|
|
77
|
+
function loadAnchorLookup(source) {
|
|
78
|
+
return source.binary
|
|
79
|
+
? new PostcodeBinaryResolver(new Uint8Array(readFileSync(source.path))).toAnchorLookup()
|
|
80
|
+
: parseAnchorLookup(JSON.parse(readFileSync(source.path, "utf8")));
|
|
81
|
+
}
|
|
82
|
+
/** A loud, descriptive fail-closed error for a declared-but-unfed channel. */
|
|
83
|
+
class UnfedChannelError extends Error {
|
|
84
|
+
constructor(message) {
|
|
85
|
+
super(message);
|
|
86
|
+
this.name = "UnfedChannelError";
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* A loud, descriptive fail-closed error for a conventions mask that would destroy a CERTIFIED
|
|
91
|
+
* capability (#718/#719). Thrown by {@link assertConventionsRespectCapabilities} — the structural
|
|
92
|
+
* guard that makes the D2/#719 bug-class (a `forbiddenTags` row suppressing a tag the model
|
|
93
|
+
* demonstrably emits) impossible to ship.
|
|
94
|
+
*/
|
|
95
|
+
class CapabilityViolationError extends Error {
|
|
96
|
+
constructor(message) {
|
|
97
|
+
super(message);
|
|
98
|
+
this.name = "CapabilityViolationError";
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* The load-time delta-gate (#718/#719). Iterate the codex `ADDRESS_SYSTEM_CONVENTIONS`; for every
|
|
103
|
+
* `forbiddenTags` entry, look up the loaded tier's certified capability for that (system, tag). The
|
|
104
|
+
* forbid is ILLEGAL — the mask provably destroys a real capability — when the model is certified to
|
|
105
|
+
* emit the tag (`maskOffF1` present) and the mask measurably drops it:
|
|
106
|
+
*
|
|
107
|
+
* ```
|
|
108
|
+
* maskOffF1 − (maskOnF1 ?? 0) > CAPABILITY_DELTA_THRESHOLD
|
|
109
|
+
* ```
|
|
110
|
+
*
|
|
111
|
+
* A forbidden tag with NO capability entry (model not certified there), or one whose `maskOnF1`
|
|
112
|
+
* shows the mask leaves it intact (small/zero/negative delta), is LEGAL. When `maskOnF1` is ABSENT
|
|
113
|
+
* for a certified tag, the mask's effect was never measured — and since the mask is a hard −1e9
|
|
114
|
+
* emission ban, we conservatively assume full destruction (delta = maskOffF1 − 0). That's the #719
|
|
115
|
+
* shape: FR `street_prefix` certified at maskOff 80.0, no benign mask-on measurement → forbidding
|
|
116
|
+
* it is rejected at load time.
|
|
117
|
+
*
|
|
118
|
+
* Back-compat: a card with no `capabilities` block (pre-#718) has no claims to consult, so the gate
|
|
119
|
+
* is a one-time-warn no-op and the model still loads.
|
|
120
|
+
*/
|
|
121
|
+
let warnedNoCapabilities = false;
|
|
122
|
+
function assertConventionsRespectCapabilities(modelCardPath, tier, strict) {
|
|
123
|
+
const manifest = readCapabilityManifest(modelCardPath);
|
|
124
|
+
if (!manifest) {
|
|
125
|
+
// No certified capabilities → nothing to protect. Old cards still load (warn ONCE per process).
|
|
126
|
+
if (!warnedNoCapabilities) {
|
|
127
|
+
warnedNoCapabilities = true;
|
|
128
|
+
console.error(`[createScorer] model-card has no \`capabilities\` block — the conventions capability-gate ` +
|
|
129
|
+
`(#718/#719) is SKIPPED. Regenerate the card via scripts/eval/gen-capability-manifest.ts to ` +
|
|
130
|
+
`certify per-tag capability and enable the gate.`);
|
|
131
|
+
}
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
for (const [system, conventions] of Object.entries(ADDRESS_SYSTEM_CONVENTIONS)) {
|
|
135
|
+
for (const tag of conventions?.forbiddenTags ?? []) {
|
|
136
|
+
const cap = lookupTagCapability(manifest, tier, system, tag);
|
|
137
|
+
if (!cap)
|
|
138
|
+
continue; // model not certified to emit this tag here → the mask can't destroy it.
|
|
139
|
+
const delta = cap.maskOffF1 - (cap.maskOnF1 ?? 0);
|
|
140
|
+
if (delta > CAPABILITY_DELTA_THRESHOLD) {
|
|
141
|
+
const maskOn = cap.maskOnF1 === undefined ? "unmeasured (assumed 0 — hard −1e9 ban)" : String(cap.maskOnF1);
|
|
142
|
+
fail(strict, `conventions forbids \`${tag}\` for system \`${system}\` but the model is certified to emit it ` +
|
|
143
|
+
`(tier \`${tier}\`: maskOff F1 ${cap.maskOffF1} vs maskOn ${maskOn}; Δ=${delta.toFixed(2)} > ` +
|
|
144
|
+
`${CAPABILITY_DELTA_THRESHOLD}); this mask would destroy a real capability — #718/#719. ` +
|
|
145
|
+
`Either remove \`${tag}\` from the codex forbiddenTags for \`${system}\`, or re-certify the ` +
|
|
146
|
+
`model and prove the mask is benign (record a maskOnF1 within ${CAPABILITY_DELTA_THRESHOLD} of maskOff).`, CapabilityViolationError);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Construct a `NeuralAddressClassifier` wired to the model-card's declared SHIP-CONFIG (anchor +
|
|
153
|
+
* gazetteer + conventions + bridge + near-postcode suppression), failing closed in `strict` mode
|
|
154
|
+
* when a declared channel can't actually be fed.
|
|
155
|
+
*
|
|
156
|
+
* Resolution of "what's required": the card's `requires` block when present; otherwise INFERRED
|
|
157
|
+
* from the ONNX graph's input names (back-compat for every pre-#718 bundle). Explicit `overrides`
|
|
158
|
+
* divert from the declaration with a loud warning rather than a throw.
|
|
159
|
+
*/
|
|
160
|
+
export async function createScorer(opts) {
|
|
161
|
+
const strict = opts.strict ?? true;
|
|
162
|
+
const overrides = opts.overrides ?? {};
|
|
163
|
+
if (!existsSync(opts.modelPath))
|
|
164
|
+
throw new Error(`createScorer: modelPath does not exist: ${opts.modelPath}`);
|
|
165
|
+
if (!existsSync(opts.tokenizerPath)) {
|
|
166
|
+
throw new Error(`createScorer: tokenizerPath does not exist: ${opts.tokenizerPath}`);
|
|
167
|
+
}
|
|
168
|
+
if (!existsSync(opts.modelCardPath)) {
|
|
169
|
+
throw new Error(`createScorer: modelCardPath does not exist: ${opts.modelCardPath}`);
|
|
170
|
+
}
|
|
171
|
+
const labels = readLabelsFromModelCard(opts.modelCardPath);
|
|
172
|
+
const [tokenizer, runner] = await Promise.all([
|
|
173
|
+
MailwomanTokenizer.loadFromFile(opts.tokenizerPath),
|
|
174
|
+
OnnxRunner.create(opts.modelPath),
|
|
175
|
+
]);
|
|
176
|
+
// What the model DECLARES it needs. Card `requires` block is authoritative; older cards (no block)
|
|
177
|
+
// fall back to the ONNX graph's declared inputs — a model exporting anchor_features/gazetteer_features
|
|
178
|
+
// trained with those channels mandatory. Conventions/bridge are card-only (not graph-observable).
|
|
179
|
+
const declared = readRequiredChannels(opts.modelCardPath) ?? inferRequiredChannelsFromInputs(await runner.inputNames());
|
|
180
|
+
// --- Capability-manifest delta-gate (#718/#719) -----------------------------------------------
|
|
181
|
+
// BEFORE wiring the conventions mask, prove the shipped codex `forbiddenTags` don't destroy a tag
|
|
182
|
+
// this model is CERTIFIED to emit (per the card's `capabilities` block for the loaded tier). This
|
|
183
|
+
// is a property of the model-card + codex pairing, independent of any per-instance `overrides` —
|
|
184
|
+
// an ablation scorer still loads the same shipped conventions table production will use, so the
|
|
185
|
+
// gate runs unconditionally. Makes the D2/#719 bug-class structurally impossible to ship.
|
|
186
|
+
assertConventionsRespectCapabilities(opts.modelCardPath, opts.tier ?? "server", strict);
|
|
187
|
+
// --- Anchor channel ---------------------------------------------------------------------------
|
|
188
|
+
// Caller-pinned path wins (explicit `--anchor-lookup`, always JSON); else fall back to the
|
|
189
|
+
// operator pilot JSON or, failing that, the weights-package soft-feed sibling (PCB1 or JSON, #718).
|
|
190
|
+
const anchorSource = opts.anchorLookupPath
|
|
191
|
+
? { path: opts.anchorLookupPath, binary: false }
|
|
192
|
+
: defaultAnchorSource(opts.locale);
|
|
193
|
+
const anchorRequired = declared.anchor?.required ?? false;
|
|
194
|
+
let postcodeAnchorLookup;
|
|
195
|
+
if (overrides.anchor === false) {
|
|
196
|
+
if (anchorRequired) {
|
|
197
|
+
console.error(`[createScorer] OVERRIDE: anchor channel ABLATED (override anchor:false) but the model-card ` +
|
|
198
|
+
`declares it REQUIRED. Deliberate OOD — the model was TRAINED with the anchor channel.`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
postcodeAnchorLookup = anchorSource && existsSync(anchorSource.path) ? loadAnchorLookup(anchorSource) : undefined;
|
|
203
|
+
// Fail closed: declared-required but the lookup is missing or parsed empty → the model would be
|
|
204
|
+
// fed zeros (the anchor-off identity) and silently go OOD. That's the #566/#685 trap.
|
|
205
|
+
if (anchorRequired && !(postcodeAnchorLookup && postcodeAnchorLookup.size > 0)) {
|
|
206
|
+
const reason = postcodeAnchorLookup
|
|
207
|
+
? `parsed lookup is EMPTY (size 0)`
|
|
208
|
+
: `lookup not found (tried ${anchorSource?.path ?? DEFAULT_ANCHOR_LOOKUP} + weights-package sibling)`;
|
|
209
|
+
fail(strict, `anchor channel is declared REQUIRED by the model-card but cannot be fed: ${reason}. ` +
|
|
210
|
+
`Provide a valid --anchor-lookup, or pass overrides.anchor=false for a deliberate ablation.`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// --- Gazetteer channel ------------------------------------------------------------------------
|
|
214
|
+
const gazetteerLexiconPath = opts.gazetteerLexiconPath ?? defaultGazetteerLexicon(opts.locale);
|
|
215
|
+
const gazetteerRequired = declared.gazetteer?.required ?? false;
|
|
216
|
+
let gazetteerLexicon;
|
|
217
|
+
if (overrides.gazetteer === false) {
|
|
218
|
+
if (gazetteerRequired) {
|
|
219
|
+
console.error(`[createScorer] OVERRIDE: gazetteer channel ABLATED (override gazetteer:false) but the ` +
|
|
220
|
+
`model-card declares it REQUIRED. Deliberate OOD — the model was TRAINED with the gazetteer clue.`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
gazetteerLexicon =
|
|
225
|
+
gazetteerLexiconPath && existsSync(gazetteerLexiconPath)
|
|
226
|
+
? parseGazetteerLexicon(JSON.parse(readFileSync(gazetteerLexiconPath, "utf8")))
|
|
227
|
+
: undefined;
|
|
228
|
+
if (gazetteerRequired && !gazetteerLexicon) {
|
|
229
|
+
fail(strict, `gazetteer channel is declared REQUIRED by the model-card but the lexicon file was not found ` +
|
|
230
|
+
`at ${gazetteerLexiconPath ?? DEFAULT_GAZETTEER_LEXICON}. Provide a valid --gazetteer-lexicon, or pass ` +
|
|
231
|
+
`overrides.gazetteer=false for a deliberate ablation.`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// --- Conventions mode -------------------------------------------------------------------------
|
|
235
|
+
const conventionsRequired = declared.conventions?.required ?? false;
|
|
236
|
+
const declaredConventionsMode = declared.conventions?.mode ?? "auto";
|
|
237
|
+
let addressSystemConventions;
|
|
238
|
+
if (overrides.conventions !== undefined) {
|
|
239
|
+
if (overrides.conventions === false) {
|
|
240
|
+
addressSystemConventions = undefined;
|
|
241
|
+
if (conventionsRequired) {
|
|
242
|
+
console.error(`[createScorer] OVERRIDE: conventions DISABLED (override conventions:false) but the ` +
|
|
243
|
+
`model-card declares them REQUIRED (mode "${declaredConventionsMode}").`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
addressSystemConventions = overrides.conventions;
|
|
248
|
+
if (overrides.conventions !== declaredConventionsMode) {
|
|
249
|
+
console.error(`[createScorer] OVERRIDE: conventions mode set to "${overrides.conventions}" (model-card ` +
|
|
250
|
+
`declares "${declaredConventionsMode}").`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
// Declaration drives it: required → the declared mode; not required → leave undefined (byte-stable).
|
|
256
|
+
addressSystemConventions = conventionsRequired ? declaredConventionsMode : undefined;
|
|
257
|
+
if (conventionsRequired && !addressSystemConventions) {
|
|
258
|
+
fail(strict, `conventions are declared REQUIRED by the model-card but no mode could be resolved.`);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// --- Bridge + near-postcode choreography ------------------------------------------------------
|
|
262
|
+
const bridgePunctuationGaps = overrides.bridge ?? declared.bridge?.required ?? false;
|
|
263
|
+
const suppressGazetteerNearPostcode = overrides.suppressGazetteerNearPostcode ?? declared.suppress_gazetteer_near_postcode ?? false;
|
|
264
|
+
return new NeuralAddressClassifier({
|
|
265
|
+
tokenizer,
|
|
266
|
+
runner,
|
|
267
|
+
...(labels ? { labels } : {}),
|
|
268
|
+
...(postcodeAnchorLookup ? { postcodeAnchorLookup } : {}),
|
|
269
|
+
...(gazetteerLexicon ? { gazetteerLexicon } : {}),
|
|
270
|
+
suppressGazetteerNearPostcode,
|
|
271
|
+
...(addressSystemConventions ? { addressSystemConventions: addressSystemConventions } : {}),
|
|
272
|
+
bridgePunctuationGaps,
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Throw in strict mode; otherwise warn loudly and continue (deliberate below-config debugging).
|
|
277
|
+
* `ErrorClass` defaults to {@link UnfedChannelError} (the channel-feed traps); the capability-gate
|
|
278
|
+
* passes {@link CapabilityViolationError} so the two fail-closed families are distinguishable.
|
|
279
|
+
*/
|
|
280
|
+
function fail(strict, message, ErrorClass = UnfedChannelError) {
|
|
281
|
+
const full = `[createScorer] ${message}`;
|
|
282
|
+
if (strict)
|
|
283
|
+
throw new ErrorClass(full);
|
|
284
|
+
console.error(`${full}\n[createScorer] strict=false — continuing despite the violation.`);
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=scorer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scorer.js","sourceRoot":"","sources":["../scorer.ts"],"names":[],"mappings":"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"}
|