@mailwoman/neural-web 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/index.d.ts +2 -2
- package/out/index.js +2 -2
- package/out/loader.d.ts +51 -55
- package/out/loader.d.ts.map +1 -1
- package/out/loader.js +42 -44
- package/out/loader.js.map +1 -1
- package/out/web-onnx-runner.d.ts +20 -21
- package/out/web-onnx-runner.d.ts.map +1 -1
- package/out/web-onnx-runner.js +20 -21
- package/out/web-onnx-runner.js.map +1 -1
- package/package.json +11 -11
package/out/index.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*/
|
|
6
|
-
export {
|
|
7
|
-
export { DEFAULT_FIXED_SEQ_LEN,
|
|
6
|
+
export { defaultGazetteerLexiconURL, loadNeuralClassifierFromUrls, type LoadFromUrlsOpts } from "./loader.js";
|
|
7
|
+
export { DEFAULT_FIXED_SEQ_LEN, WebONNXRunner, type WebONNXRunnerOpts } from "./web-onnx-runner.js";
|
|
8
8
|
export { MailwomanTokenizer, NeuralAddressClassifier, type NeuralAddressClassifierConfig, type NeuralRunner, } from "@mailwoman/neural/browser";
|
|
9
9
|
export type { InferResult } from "@mailwoman/neural/browser";
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
package/out/index.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*/
|
|
6
|
-
export {
|
|
7
|
-
export { DEFAULT_FIXED_SEQ_LEN,
|
|
6
|
+
export { defaultGazetteerLexiconURL, loadNeuralClassifierFromUrls } from "./loader.js";
|
|
7
|
+
export { DEFAULT_FIXED_SEQ_LEN, WebONNXRunner } from "./web-onnx-runner.js";
|
|
8
8
|
// Re-export the public neural surface so callers don't need both packages on the typed path.
|
|
9
9
|
// Pull from the browser-safe entry — the default entry would drag onnxruntime-node + node:fs
|
|
10
10
|
// into the bundle graph via classifier.ts's transitive imports.
|
package/out/loader.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
6
|
* Browser-side loader that pairs the existing `MailwomanTokenizer` (whose `loadFromBase64` path is
|
|
7
|
-
* already browser-safe — it doesn't touch Node fs) with a fresh `
|
|
7
|
+
* already browser-safe — it doesn't touch Node fs) with a fresh `WebONNXRunner`, and returns a
|
|
8
8
|
* ready-to-use `NeuralAddressClassifier`.
|
|
9
9
|
*
|
|
10
10
|
* V1 strategy: fetch both `model.onnx` and `tokenizer.model` over HTTP from caller-provided URLs
|
|
@@ -13,98 +13,94 @@
|
|
|
13
13
|
* files; for a static deploy, copy them into the public bundle and pass the resulting URLs.
|
|
14
14
|
*/
|
|
15
15
|
import { NeuralAddressClassifier, type NeuralAddressClassifierConfig } from "@mailwoman/neural/browser";
|
|
16
|
-
import { type
|
|
17
|
-
export type {
|
|
16
|
+
import { type WebONNXRunnerDiagnostics, type WebONNXRunnerOpts } from "./web-onnx-runner.js";
|
|
17
|
+
export type { WebONNXRunnerDiagnostics };
|
|
18
18
|
export interface LoadResult {
|
|
19
19
|
classifier: NeuralAddressClassifier;
|
|
20
|
-
diagnostics:
|
|
20
|
+
diagnostics: WebONNXRunnerDiagnostics | null;
|
|
21
21
|
/**
|
|
22
|
-
* Labels actually applied to the classifier. `null` when no model-card was provided or its
|
|
23
|
-
*
|
|
22
|
+
* Labels actually applied to the classifier. `null` when no model-card was provided or its `labels` field was missing
|
|
23
|
+
* — the classifier fell back to its built-in default (Stage 2).
|
|
24
24
|
*/
|
|
25
25
|
labels: readonly string[] | null;
|
|
26
26
|
/**
|
|
27
|
-
* The parsed postcode-anchor lookup (postcode → posterior + centroid), when anchor binaries were
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* this lookup has a real centroid for every covered ZIP.
|
|
27
|
+
* The parsed postcode-anchor lookup (postcode → posterior + centroid), when anchor binaries were loaded. Exposed so
|
|
28
|
+
* consumers (the demo's anchor-centroid map fallback) can reuse the SAME artifact the model channel feeds from — WOF
|
|
29
|
+
* ships placeholder (0,0) for ~22% of US postcodes; this lookup has a real centroid for every covered ZIP.
|
|
31
30
|
*/
|
|
32
31
|
postcodeAnchorLookup?: import("@mailwoman/neural").AnchorLookup;
|
|
33
32
|
}
|
|
34
33
|
export interface LoadFromUrlsOpts {
|
|
35
34
|
/** URL to the ONNX model file (e.g. `/static/mailwoman/model.onnx`). */
|
|
36
|
-
|
|
35
|
+
modelURL: string;
|
|
37
36
|
/** URL to the SentencePiece tokenizer model (e.g. `/static/mailwoman/tokenizer.model`). */
|
|
38
|
-
|
|
37
|
+
tokenizerURL: string;
|
|
39
38
|
/**
|
|
40
|
-
* URL to `model-card.json`. When provided, its `labels` field is threaded into the classifier so
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* default.
|
|
39
|
+
* URL to `model-card.json`. When provided, its `labels` field is threaded into the classifier so post-Stage-2 bundles
|
|
40
|
+
* (33-label Stage 3 and beyond) decode correctly. Skip for legacy bundles whose cards predate the `labels` field —
|
|
41
|
+
* the loader falls back to the built-in Stage 2 default.
|
|
44
42
|
*
|
|
45
|
-
* Required for any v0.6.x+ bundle: without it the classifier builds a 21×21 transition mask while
|
|
46
|
-
*
|
|
43
|
+
* Required for any v0.6.x+ bundle: without it the classifier builds a 21×21 transition mask while the model emits 33
|
|
44
|
+
* logits and viterbi crashes with "Cannot read properties of undefined".
|
|
47
45
|
*/
|
|
48
|
-
|
|
46
|
+
modelCardURL?: string;
|
|
49
47
|
/** Runner options (WebGPU toggle, fixed sequence length, WASM path override). */
|
|
50
|
-
runner?:
|
|
48
|
+
runner?: WebONNXRunnerOpts;
|
|
51
49
|
/**
|
|
52
|
-
* URLs to one or more PCB1 postcode binaries (`postcode-<cc>.bin`). For anchor-trained models
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
50
|
+
* URLs to one or more PCB1 postcode binaries (`postcode-<cc>.bin`). For anchor-trained models (#239/#240) these are
|
|
51
|
+
* decoded + merged into the postcode→anchor lookup the classifier feeds at inference, so the demo runs the model with
|
|
52
|
+
* the anchor on. Pass the locales the model handles (e.g. US + DE). Omit for plain models — the runner then feeds the
|
|
53
|
+
* anchor-off identity.
|
|
56
54
|
*/
|
|
57
55
|
postcodeBinaryUrls?: readonly string[];
|
|
58
56
|
/**
|
|
59
|
-
* URL to the gazetteer-anchor lexicon JSON (`anchor-lexicon-v1.json`, #464 — the in-repo source
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
57
|
+
* URL to the gazetteer-anchor lexicon JSON (`anchor-lexicon-v1.json`, #464 — the in-repo source is
|
|
58
|
+
* `data/gazetteer/anchor-lexicon-v1.json`). Gazetteer-trained models (v4.2.0+, whose ONNX declares the
|
|
59
|
+
* `gazetteer_features`/`gazetteer_confidence` inputs) REQUIRE this clue at inference: running them on the zero-filled
|
|
60
|
+
* fallback is the measured train/inference mismatch that wrecks segmentation ("the zero-fill trap",
|
|
61
|
+
* CONTRIBUTING_MODEL_WORK.mdx eval invariants).
|
|
64
62
|
*
|
|
65
|
-
* Defaults to `anchor-lexicon-v1.json` next to `
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
* entirely.
|
|
63
|
+
* Defaults to `anchor-lexicon-v1.json` next to `modelURL`. A fetch miss (404 etc.) does NOT throw — older bundles
|
|
64
|
+
* never shipped the file — but if the loaded model turns out to be gazetteer-trained the loader logs a loud
|
|
65
|
+
* `console.error` naming the missing file and the model runs gazetteer-off (structurally valid, quality-degraded).
|
|
66
|
+
* Pass `null` to skip the fetch entirely.
|
|
70
67
|
*/
|
|
71
|
-
|
|
68
|
+
gazetteerLexiconURL?: string | null;
|
|
72
69
|
/**
|
|
73
|
-
* Channel choreography (#464, v0.9.13 postcode fix): zero the gazetteer clue on pieces adjacent
|
|
74
|
-
*
|
|
75
|
-
*
|
|
70
|
+
* Channel choreography (#464, v0.9.13 postcode fix): zero the gazetteer clue on pieces adjacent to a postcode-anchor
|
|
71
|
+
* hit. Defaults to TRUE — it pairs with the train-time half on every gazetteer-trained bundle (v4.2.0+) and is inert
|
|
72
|
+
* when either channel is absent.
|
|
76
73
|
*/
|
|
77
74
|
suppressGazetteerNearPostcode?: boolean;
|
|
78
75
|
/**
|
|
79
|
-
* Address-system conventions mode (#511 Tier A, v4.3.0+). Defaults to `"auto"` (read the model's
|
|
80
|
-
*
|
|
81
|
-
* pin, or `null` to disable.
|
|
76
|
+
* Address-system conventions mode (#511 Tier A, v4.3.0+). Defaults to `"auto"` (read the model's locale head when
|
|
77
|
+
* exported; inert on bundles without `locale_logits`). Pass a `SystemCode` to pin, or `null` to disable.
|
|
82
78
|
*/
|
|
83
79
|
addressSystemConventions?: NeuralAddressClassifierConfig["addressSystemConventions"] | null;
|
|
84
80
|
/**
|
|
85
|
-
* Span bridge (v4.4.0 declared behavior): merge same-tag spans split at intra-token punctuation
|
|
86
|
-
*
|
|
87
|
-
*
|
|
81
|
+
* Span bridge (v4.4.0 declared behavior): merge same-tag spans split at intra-token punctuation ("P.O. Box").
|
|
82
|
+
* Defaults to TRUE per the v4.4.0 ship config (model-card.json: po_box 60.4 without, 89.1 with). Pass false to
|
|
83
|
+
* disable for pre-bridge bundles where gate parity matters.
|
|
88
84
|
*/
|
|
89
85
|
bridgePunctuationGaps?: boolean;
|
|
90
86
|
/** Optional fetch override. Defaults to `globalThis.fetch`. */
|
|
91
87
|
fetchImpl?: typeof fetch;
|
|
92
88
|
}
|
|
93
89
|
/**
|
|
94
|
-
* Default location of the gazetteer-anchor lexicon: `anchor-lexicon-v1.json` as a sibling of the
|
|
95
|
-
*
|
|
96
|
-
*
|
|
90
|
+
* Default location of the gazetteer-anchor lexicon: `anchor-lexicon-v1.json` as a sibling of the model file. Matches
|
|
91
|
+
* how release bundles lay out their version directory (model.onnx, tokenizer.model, model-card.json, postcode-*.bin,
|
|
92
|
+
* anchor-lexicon-v1.json side by side).
|
|
97
93
|
*/
|
|
98
|
-
export declare function
|
|
94
|
+
export declare function defaultGazetteerLexiconURL(modelURL: string): string;
|
|
99
95
|
/**
|
|
100
|
-
* Convenience factory: fetch model + tokenizer, build the runner, return a classifier. The
|
|
101
|
-
*
|
|
102
|
-
*
|
|
96
|
+
* Convenience factory: fetch model + tokenizer, build the runner, return a classifier. The tokenizer is loaded via the
|
|
97
|
+
* existing `loadFromBase64` path so this file shares zero Node-only code with `@mailwoman/neural/classifier`'s
|
|
98
|
+
* `loadFromWeights`.
|
|
103
99
|
*
|
|
104
|
-
* The classifier is constructed with the v4.4.0 ship config by default (gazetteer lexicon +
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
100
|
+
* The classifier is constructed with the v4.4.0 ship config by default (gazetteer lexicon + postcode anchor when their
|
|
101
|
+
* assets resolve, `suppressGazetteerNearPostcode: true`, `addressSystemConventions: "auto"`, `bridgePunctuationGaps:
|
|
102
|
+
* true`) — every knob is inert on bundles that predate the corresponding channel, so older versions keep decoding
|
|
103
|
+
* unchanged.
|
|
108
104
|
*/
|
|
109
105
|
export declare function loadNeuralClassifierFromUrls(opts: LoadFromUrlsOpts): Promise<LoadResult>;
|
|
110
106
|
//# sourceMappingURL=loader.d.ts.map
|
package/out/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAIN,uBAAuB,EACvB,KAAK,6BAA6B,EAGlC,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAiB,KAAK,wBAAwB,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAE3G,YAAY,EAAE,wBAAwB,EAAE,CAAA;AAExC,MAAM,WAAW,UAAU;IAC1B,UAAU,EAAE,uBAAuB,CAAA;IACnC,WAAW,EAAE,wBAAwB,GAAG,IAAI,CAAA;IAC5C;;;OAGG;IACH,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;IAChC
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAIN,uBAAuB,EACvB,KAAK,6BAA6B,EAGlC,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAiB,KAAK,wBAAwB,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAE3G,YAAY,EAAE,wBAAwB,EAAE,CAAA;AAExC,MAAM,WAAW,UAAU;IAC1B,UAAU,EAAE,uBAAuB,CAAA;IACnC,WAAW,EAAE,wBAAwB,GAAG,IAAI,CAAA;IAC5C;;;OAGG;IACH,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;IAChC;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,mBAAmB,EAAE,YAAY,CAAA;CAC/D;AAED,MAAM,WAAW,gBAAgB;IAChC,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAA;IAChB,2FAA2F;IAC3F,YAAY,EAAE,MAAM,CAAA;IACpB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iFAAiF;IACjF,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC;;;;;;;;;;;OAWG;IACH,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC;;;;OAIG;IACH,6BAA6B,CAAC,EAAE,OAAO,CAAA;IACvC;;;OAGG;IACH,wBAAwB,CAAC,EAAE,6BAA6B,CAAC,0BAA0B,CAAC,GAAG,IAAI,CAAA;IAC3F;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,+DAA+D;IAC/D,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACxB;AAkCD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAInE;AAED;;;;;;;;;GASG;AACH,wBAAsB,4BAA4B,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAgD9F"}
|
package/out/loader.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
6
|
* Browser-side loader that pairs the existing `MailwomanTokenizer` (whose `loadFromBase64` path is
|
|
7
|
-
* already browser-safe — it doesn't touch Node fs) with a fresh `
|
|
7
|
+
* already browser-safe — it doesn't touch Node fs) with a fresh `WebONNXRunner`, and returns a
|
|
8
8
|
* ready-to-use `NeuralAddressClassifier`.
|
|
9
9
|
*
|
|
10
10
|
* V1 strategy: fetch both `model.onnx` and `tokenizer.model` over HTTP from caller-provided URLs
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* files; for a static deploy, copy them into the public bundle and pass the resulting URLs.
|
|
14
14
|
*/
|
|
15
15
|
import { MailwomanTokenizer, NeuralAddressClassifier, parseGazetteerLexicon, PostcodeBinaryResolver, } from "@mailwoman/neural/browser";
|
|
16
|
-
import {
|
|
16
|
+
import { WebONNXRunner } from "./web-onnx-runner.js";
|
|
17
17
|
/** Merge per-binary anchor lookups: union the country posteriors per postcode, mean the centroids. */
|
|
18
18
|
function mergeAnchorLookups(lookups) {
|
|
19
19
|
if (lookups.length === 1)
|
|
@@ -44,40 +44,40 @@ function mergeAnchorLookups(lookups) {
|
|
|
44
44
|
return merged;
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
|
-
* Default location of the gazetteer-anchor lexicon: `anchor-lexicon-v1.json` as a sibling of the
|
|
48
|
-
*
|
|
49
|
-
*
|
|
47
|
+
* Default location of the gazetteer-anchor lexicon: `anchor-lexicon-v1.json` as a sibling of the model file. Matches
|
|
48
|
+
* how release bundles lay out their version directory (model.onnx, tokenizer.model, model-card.json, postcode-*.bin,
|
|
49
|
+
* anchor-lexicon-v1.json side by side).
|
|
50
50
|
*/
|
|
51
|
-
export function
|
|
51
|
+
export function defaultGazetteerLexiconURL(modelURL) {
|
|
52
52
|
// Swap the final path segment — string surgery rather than `new URL()` so relative model URLs
|
|
53
53
|
// ("/static/mailwoman/model.onnx") stay relative.
|
|
54
|
-
return
|
|
54
|
+
return modelURL.replace(/[^/]*$/, "anchor-lexicon-v1.json");
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
|
-
* Convenience factory: fetch model + tokenizer, build the runner, return a classifier. The
|
|
58
|
-
*
|
|
59
|
-
*
|
|
57
|
+
* Convenience factory: fetch model + tokenizer, build the runner, return a classifier. The tokenizer is loaded via the
|
|
58
|
+
* existing `loadFromBase64` path so this file shares zero Node-only code with `@mailwoman/neural/classifier`'s
|
|
59
|
+
* `loadFromWeights`.
|
|
60
60
|
*
|
|
61
|
-
* The classifier is constructed with the v4.4.0 ship config by default (gazetteer lexicon +
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
61
|
+
* The classifier is constructed with the v4.4.0 ship config by default (gazetteer lexicon + postcode anchor when their
|
|
62
|
+
* assets resolve, `suppressGazetteerNearPostcode: true`, `addressSystemConventions: "auto"`, `bridgePunctuationGaps:
|
|
63
|
+
* true`) — every knob is inert on bundles that predate the corresponding channel, so older versions keep decoding
|
|
64
|
+
* unchanged.
|
|
65
65
|
*/
|
|
66
66
|
export async function loadNeuralClassifierFromUrls(opts) {
|
|
67
67
|
const fetchImpl = opts.fetchImpl ?? globalThis.fetch;
|
|
68
68
|
if (!fetchImpl) {
|
|
69
69
|
throw new Error("no fetch implementation available — pass fetchImpl in non-fetch environments");
|
|
70
70
|
}
|
|
71
|
-
const
|
|
71
|
+
const gazetteerLexiconURL = opts.gazetteerLexiconURL === null ? null : (opts.gazetteerLexiconURL ?? defaultGazetteerLexiconURL(opts.modelURL));
|
|
72
72
|
const [modelBytes, tokenizerBytes, labels, gazetteerLexicon] = await Promise.all([
|
|
73
|
-
fetchBytes(opts.
|
|
74
|
-
fetchBytes(opts.
|
|
75
|
-
opts.
|
|
76
|
-
|
|
73
|
+
fetchBytes(opts.modelURL, fetchImpl),
|
|
74
|
+
fetchBytes(opts.tokenizerURL, fetchImpl),
|
|
75
|
+
opts.modelCardURL ? fetchLabelsFromModelCard(opts.modelCardURL, fetchImpl) : Promise.resolve(null),
|
|
76
|
+
gazetteerLexiconURL ? fetchGazetteerLexicon(gazetteerLexiconURL, fetchImpl) : Promise.resolve(null),
|
|
77
77
|
]);
|
|
78
78
|
const [tokenizer, runner, postcodeAnchorLookup] = await Promise.all([
|
|
79
79
|
MailwomanTokenizer.loadFromBase64(toBase64(tokenizerBytes)),
|
|
80
|
-
|
|
80
|
+
WebONNXRunner.fromBytes(modelBytes, opts.runner),
|
|
81
81
|
opts.postcodeBinaryUrls?.length
|
|
82
82
|
? Promise.all(opts.postcodeBinaryUrls.map(async (url) => new PostcodeBinaryResolver(await fetchBytes(url, fetchImpl)).toAnchorLookup())).then(mergeAnchorLookups)
|
|
83
83
|
: Promise.resolve(undefined),
|
|
@@ -96,18 +96,17 @@ export async function loadNeuralClassifierFromUrls(opts) {
|
|
|
96
96
|
await runner.infer([0]);
|
|
97
97
|
warnOnUnfedTrainedChannels(runner, {
|
|
98
98
|
gazetteerLexicon,
|
|
99
|
-
|
|
99
|
+
gazetteerLexiconURL,
|
|
100
100
|
postcodeAnchorLookup,
|
|
101
101
|
});
|
|
102
102
|
return { classifier, diagnostics: runner.diagnostics, labels };
|
|
103
103
|
}
|
|
104
104
|
/**
|
|
105
|
-
* Loud degrade (#464): the warmup `infer([0])` above forced session creation, so the graph's
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
* 'feeds'`.) The loader still returns a working classifier — structural fallback, loud console.
|
|
105
|
+
* Loud degrade (#464): the warmup `infer([0])` above forced session creation, so the graph's declared inputs are now
|
|
106
|
+
* known. A gazetteer/anchor-TRAINED model running on the zero-filled fallback is a measured failure mode
|
|
107
|
+
* (train/inference mismatch — "the zero-fill trap"), not a quality-neutral default; without this check the only symptom
|
|
108
|
+
* would be silently degraded parses. (Pre-fix, the symptom was worse still: ORT's cryptic `input 'gazetteer_features'
|
|
109
|
+
* is missing in 'feeds'`.) The loader still returns a working classifier — structural fallback, loud console.
|
|
111
110
|
*/
|
|
112
111
|
function warnOnUnfedTrainedChannels(runner, fed) {
|
|
113
112
|
const inputNames = runner.inputNames;
|
|
@@ -116,10 +115,10 @@ function warnOnUnfedTrainedChannels(runner, fed) {
|
|
|
116
115
|
if (inputNames.includes("gazetteer_features") && !fed.gazetteerLexicon) {
|
|
117
116
|
console.error("[mailwoman/neural-web] This model is gazetteer-anchor-trained (its ONNX declares `gazetteer_features`) " +
|
|
118
117
|
"but no gazetteer lexicon was loaded" +
|
|
119
|
-
(fed.
|
|
120
|
-
? ` — \`anchor-lexicon-v1.json\` could not be fetched from ${fed.
|
|
121
|
-
"Upload the lexicon next to model.onnx, or pass `
|
|
122
|
-
: " — `
|
|
118
|
+
(fed.gazetteerLexiconURL
|
|
119
|
+
? ` — \`anchor-lexicon-v1.json\` could not be fetched from ${fed.gazetteerLexiconURL}. ` +
|
|
120
|
+
"Upload the lexicon next to model.onnx, or pass `gazetteerLexiconURL` explicitly."
|
|
121
|
+
: " — `gazetteerLexiconURL` was explicitly disabled (null). ") +
|
|
123
122
|
" Running with zero-filled gazetteer clues: parses will be degraded (train/inference mismatch).");
|
|
124
123
|
}
|
|
125
124
|
if (inputNames.includes("anchor_features") && !fed.postcodeAnchorLookup) {
|
|
@@ -129,10 +128,10 @@ function warnOnUnfedTrainedChannels(runner, fed) {
|
|
|
129
128
|
}
|
|
130
129
|
}
|
|
131
130
|
/**
|
|
132
|
-
* Fetch + parse `anchor-lexicon-v1.json`. A missing file (404 or network failure) returns null —
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
131
|
+
* Fetch + parse `anchor-lexicon-v1.json`. A missing file (404 or network failure) returns null — the caller decides
|
|
132
|
+
* whether that matters (it does iff the model declares the gazetteer inputs; see `warnOnUnfedTrainedChannels`). A
|
|
133
|
+
* PRESENT-but-malformed lexicon throws loudly via `parseGazetteerLexicon`'s validation — never silently zero-fill off
|
|
134
|
+
* bad data.
|
|
136
135
|
*/
|
|
137
136
|
async function fetchGazetteerLexicon(url, fetchImpl) {
|
|
138
137
|
let res;
|
|
@@ -147,12 +146,12 @@ async function fetchGazetteerLexicon(url, fetchImpl) {
|
|
|
147
146
|
return parseGazetteerLexicon((await res.json()));
|
|
148
147
|
}
|
|
149
148
|
/**
|
|
150
|
-
* Browser-side analogue of `weights.readLabelsFromModelCard`. Same shape contract: returns the
|
|
151
|
-
*
|
|
152
|
-
*
|
|
149
|
+
* Browser-side analogue of `weights.readLabelsFromModelCard`. Same shape contract: returns the `labels` array only when
|
|
150
|
+
* the card has a non-empty string array, throws on a present-but-malformed field, returns `null` when the field is
|
|
151
|
+
* simply absent (legacy pre-v0.4.0 card).
|
|
153
152
|
*
|
|
154
|
-
* A 404 on the model-card itself is treated as "no card provided" — we tolerate older bundles that
|
|
155
|
-
*
|
|
153
|
+
* A 404 on the model-card itself is treated as "no card provided" — we tolerate older bundles that shipped without one
|
|
154
|
+
* and let the classifier fall back to its compile-time default.
|
|
156
155
|
*/
|
|
157
156
|
async function fetchLabelsFromModelCard(url, fetchImpl) {
|
|
158
157
|
const res = await fetchImpl(url);
|
|
@@ -178,10 +177,9 @@ async function fetchBytes(url, fetchImpl) {
|
|
|
178
177
|
return new Uint8Array(await res.arrayBuffer());
|
|
179
178
|
}
|
|
180
179
|
/**
|
|
181
|
-
* Base64-encode a Uint8Array. Browsers + Node 18+ both have `btoa(String.fromCharCode(...))` but
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
* adding a dep for ~5 lines is silly.
|
|
180
|
+
* Base64-encode a Uint8Array. Browsers + Node 18+ both have `btoa(String.fromCharCode(...))` but String.fromCharCode
|
|
181
|
+
* chokes on long arrays (call-stack overflow on a few MB of bytes). The chunked loop avoids that — kept here rather
|
|
182
|
+
* than imported because both browser and Node need it and adding a dep for ~5 lines is silly.
|
|
185
183
|
*/
|
|
186
184
|
function toBase64(bytes) {
|
|
187
185
|
const chunkSize = 0x8000;
|
package/out/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAGN,kBAAkB,EAClB,uBAAuB,EAEvB,qBAAqB,EACrB,sBAAsB,GACtB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,aAAa,EAAyD,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAGN,kBAAkB,EAClB,uBAAuB,EAEvB,qBAAqB,EACrB,sBAAsB,GACtB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAAE,aAAa,EAAyD,MAAM,sBAAsB,CAAA;AA6E3G,sGAAsG;AACtG,SAAS,kBAAkB,CAAC,OAAgC;IAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAE,CAAA;IAC5C,MAAM,MAAM,GAAiB,IAAI,GAAG,EAAE,CAAA;IAEtC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YAErC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;gBAC3F,SAAQ;YACT,CAAC;YAED,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;gBAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAEnF,yDAAyD;YACzD,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;gBACxC,IAAI,QAAQ,CAAC,GAAG,KAAK,CAAC,IAAI,QAAQ,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;oBAC9C,QAAQ,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAA;oBACxB,QAAQ,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAA;gBACzB,CAAC;qBAAM,CAAC;oBACP,QAAQ,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;oBAC7C,QAAQ,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAC9C,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAA;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,QAAgB;IAC1D,8FAA8F;IAC9F,kDAAkD;IAClD,OAAO,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAA;AAC5D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,IAAsB;IACxE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,KAAK,CAAA;IAEpD,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAA;IAChG,CAAC;IAED,MAAM,mBAAmB,GACxB,IAAI,CAAC,mBAAmB,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,IAAI,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEnH,MAAM,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAChF,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;QACpC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC;QACxC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;QAClG,mBAAmB,CAAC,CAAC,CAAC,qBAAqB,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;KACnG,CAAC,CAAA;IAEF,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,oBAAoB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACnE,kBAAkB,CAAC,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC3D,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;QAChD,IAAI,CAAC,kBAAkB,EAAE,MAAM;YAC9B,CAAC,CAAC,OAAO,CAAC,GAAG,CACX,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CACzC,IAAI,sBAAsB,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,cAAc,EAAE,CAC7E,CACD,CAAC,IAAI,CAAC,kBAAkB,CAAC;YAC3B,CAAC,CAAC,OAAO,CAAC,OAAO,CAA2B,SAAS,CAAC;KACvD,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,IAAI,CAAC,wBAAwB,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,IAAI,MAAM,CAAC,CAAA;IAClH,MAAM,UAAU,GAAG,IAAI,uBAAuB,CAAC;QAC9C,SAAS;QACT,MAAM;QACN,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,6BAA6B,EAAE,IAAI,CAAC,6BAA6B,IAAI,IAAI;QACzE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,wBAAwB,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,IAAI,IAAI;KACzD,CAAC,CAAA;IACF,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACvB,0BAA0B,CAAC,MAAM,EAAE;QAClC,gBAAgB;QAChB,mBAAmB;QACnB,oBAAoB;KACpB,CAAC,CAAA;IAEF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,CAAA;AAC/D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,0BAA0B,CAClC,MAAqB,EACrB,GAIC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;IAEpC,IAAI,CAAC,UAAU;QAAE,OAAM;IAEvB,IAAI,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACxE,OAAO,CAAC,KAAK,CACZ,yGAAyG;YACxG,qCAAqC;YACrC,CAAC,GAAG,CAAC,mBAAmB;gBACvB,CAAC,CAAC,2DAA2D,GAAG,CAAC,mBAAmB,IAAI;oBACvF,kFAAkF;gBACnF,CAAC,CAAC,2DAA2D,CAAC;YAC/D,gGAAgG,CACjG,CAAA;IACF,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACzE,OAAO,CAAC,KAAK,CACZ,qGAAqG;YACpG,iEAAiE;YACjE,iGAAiG,CAClG,CAAA;IACF,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,qBAAqB,CAAC,GAAW,EAAE,SAAuB;IACxE,IAAI,GAAa,CAAA;IAEjB,IAAI,CAAC;QACJ,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,IAAI,CAAA;IAExB,OAAO,qBAAqB,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAgD,CAAC,CAAA;AAChG,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,wBAAwB,CAAC,GAAW,EAAE,SAAuB;IAC3E,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAA;IAEhC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACb,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAA;QACnC,MAAM,IAAI,KAAK,CAAC,SAAS,GAAG,YAAY,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;IACxE,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAyB,CAAA;IACzD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;IAE5B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IAErC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;QAClG,MAAM,IAAI,KAAK,CACd,iBAAiB,GAAG,sCAAsC;YACzD,8CAA8C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CACxE,CAAA;IACF,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAsB,CAAA;AAC1D,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,SAAuB;IAC7D,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAA;IAEhC,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,SAAS,GAAG,YAAY,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;IAEpF,OAAO,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;AAC/C,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,KAAiB;IAClC,MAAM,SAAS,GAAG,MAAM,CAAA;IACxB,IAAI,MAAM,GAAG,EAAE,CAAA;IAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAA;QAC9C,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,CAAA;IACxC,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC,CAAA;IAEnD,0FAA0F;IAC1F,sEAAsE;IACtE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AACxD,CAAC"}
|
package/out/web-onnx-runner.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Execution provider strategy:
|
|
11
11
|
*
|
|
12
|
-
* - Try WebGPU first when `
|
|
12
|
+
* - Try WebGPU first when `useWebGPU !== false`. ~10× faster than WASM on supported devices, but
|
|
13
13
|
* availability depends on browser (Chromium 113+, Safari Tech Preview) AND hardware. The
|
|
14
14
|
* runtime surfaces a clean error when WebGPU is unavailable, so the constructor falls back to
|
|
15
15
|
* WASM automatically.
|
|
@@ -17,52 +17,51 @@
|
|
|
17
17
|
* but works everywhere onnxruntime-web does — including in Node, which is how the test
|
|
18
18
|
* harness exercises this file.
|
|
19
19
|
*
|
|
20
|
-
* Tensor shape + I/O contract matches `
|
|
20
|
+
* Tensor shape + I/O contract matches `ONNXRunner` exactly: fixed-length int64 inputs, padded with
|
|
21
21
|
* zeros + attention_mask, output is a `logits` tensor of shape `[batch, seq, num_labels]`. See
|
|
22
22
|
* `@mailwoman/neural/onnx-runner` for the full export contract this file mirrors.
|
|
23
23
|
*/
|
|
24
24
|
import { type InferResult, type NeuralRunner } from "@mailwoman/neural/browser";
|
|
25
|
-
export interface
|
|
25
|
+
export interface WebONNXRunnerOpts {
|
|
26
26
|
/**
|
|
27
|
-
* Try the WebGPU execution provider first. Defaults to true. Set false to skip the WebGPU probe —
|
|
28
|
-
*
|
|
27
|
+
* Try the WebGPU execution provider first. Defaults to true. Set false to skip the WebGPU probe — useful in test
|
|
28
|
+
* environments where WebGPU isn't available and the probe failure adds latency.
|
|
29
29
|
*/
|
|
30
|
-
|
|
30
|
+
useWebGPU?: boolean;
|
|
31
31
|
/**
|
|
32
|
-
* Fixed sequence length the model expects. Matches `
|
|
33
|
-
*
|
|
32
|
+
* Fixed sequence length the model expects. Matches `ONNXRunner.DEFAULT_FIXED_SEQ_LEN` (128) by default. Re-quantized
|
|
33
|
+
* models can override.
|
|
34
34
|
*/
|
|
35
35
|
fixedSeqLen?: number;
|
|
36
36
|
/**
|
|
37
|
-
* Optional override for where onnxruntime-web should load its `.wasm` assets from. Defaults to
|
|
38
|
-
*
|
|
37
|
+
* Optional override for where onnxruntime-web should load its `.wasm` assets from. Defaults to the package's CDN
|
|
38
|
+
* paths; bundlers usually want to point this at a self-hosted copy.
|
|
39
39
|
*
|
|
40
|
-
* Example: `
|
|
40
|
+
* Example: `setWASMPaths("/static/ort/")` and put the .wasm files at /static/ort/.
|
|
41
41
|
*/
|
|
42
42
|
wasmPathsRoot?: string;
|
|
43
43
|
}
|
|
44
44
|
export declare const DEFAULT_FIXED_SEQ_LEN = 128;
|
|
45
|
-
export interface
|
|
45
|
+
export interface WebONNXRunnerDiagnostics {
|
|
46
46
|
backend: "webgpu" | "wasm";
|
|
47
47
|
modelBytes: number;
|
|
48
48
|
}
|
|
49
|
-
export declare class
|
|
49
|
+
export declare class WebONNXRunner implements NeuralRunner {
|
|
50
50
|
#private;
|
|
51
51
|
private readonly modelBytes;
|
|
52
52
|
private readonly opts;
|
|
53
53
|
readonly fixedSeqLen: number;
|
|
54
|
-
diagnostics:
|
|
54
|
+
diagnostics: WebONNXRunnerDiagnostics | null;
|
|
55
55
|
private constructor();
|
|
56
56
|
/** Construct from already-fetched model bytes. */
|
|
57
|
-
static fromBytes(modelBytes: Uint8Array, opts?:
|
|
57
|
+
static fromBytes(modelBytes: Uint8Array, opts?: WebONNXRunnerOpts): Promise<WebONNXRunner>;
|
|
58
58
|
/** Fetch the model from a URL and construct. */
|
|
59
|
-
static
|
|
59
|
+
static fromURL(modelURL: string, opts?: WebONNXRunnerOpts): Promise<WebONNXRunner>;
|
|
60
60
|
/**
|
|
61
|
-
* Names of the inputs the loaded ONNX graph declares. `null` until the session has been created
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
* mismatch ("the zero-fill trap"), not a quality-neutral degrade.
|
|
61
|
+
* Names of the inputs the loaded ONNX graph declares. `null` until the session has been created (first `infer()`
|
|
62
|
+
* call). Lets callers (e.g. the neural-web loader) detect anchor/gazetteer-trained models and warn loudly when the
|
|
63
|
+
* corresponding feature source wasn't provided — running such a model on the zero-filled fallback is the measured
|
|
64
|
+
* train/inference mismatch ("the zero-fill trap"), not a quality-neutral degrade.
|
|
66
65
|
*/
|
|
67
66
|
get inputNames(): readonly string[] | null;
|
|
68
67
|
infer(tokenIds: number[], anchor?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-onnx-runner.d.ts","sourceRoot":"","sources":["../web-onnx-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAGN,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,MAAM,2BAA2B,CAAA;AAGlC,MAAM,WAAW,iBAAiB;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,eAAO,MAAM,qBAAqB,MAAM,CAAA;AAUxC,MAAM,WAAW,wBAAwB;IACxC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,aAAc,YAAW,YAAY;;IAOhD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPtB,SAAgB,WAAW,EAAE,MAAM,CAAA;IAC5B,WAAW,EAAE,wBAAwB,GAAG,IAAI,CAAO;IAI1D,OAAO;IAOP,kDAAkD;WACrC,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"web-onnx-runner.d.ts","sourceRoot":"","sources":["../web-onnx-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAGN,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,MAAM,2BAA2B,CAAA;AAGlC,MAAM,WAAW,iBAAiB;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,eAAO,MAAM,qBAAqB,MAAM,CAAA;AAUxC,MAAM,WAAW,wBAAwB;IACxC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,aAAc,YAAW,YAAY;;IAOhD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPtB,SAAgB,WAAW,EAAE,MAAM,CAAA;IAC5B,WAAW,EAAE,wBAAwB,GAAG,IAAI,CAAO;IAI1D,OAAO;IAOP,kDAAkD;WACrC,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,aAAa,CAAC;IAOpG,gDAAgD;WACnC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,aAAa,CAAC;IA4C5F;;;;;OAKG;IACH,IAAI,UAAU,IAAI,SAAS,MAAM,EAAE,GAAG,IAAI,CAEzC;IAEK,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;CA4FvB"}
|
package/out/web-onnx-runner.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Execution provider strategy:
|
|
11
11
|
*
|
|
12
|
-
* - Try WebGPU first when `
|
|
12
|
+
* - Try WebGPU first when `useWebGPU !== false`. ~10× faster than WASM on supported devices, but
|
|
13
13
|
* availability depends on browser (Chromium 113+, Safari Tech Preview) AND hardware. The
|
|
14
14
|
* runtime surfaces a clean error when WebGPU is unavailable, so the constructor falls back to
|
|
15
15
|
* WASM automatically.
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* but works everywhere onnxruntime-web does — including in Node, which is how the test
|
|
18
18
|
* harness exercises this file.
|
|
19
19
|
*
|
|
20
|
-
* Tensor shape + I/O contract matches `
|
|
20
|
+
* Tensor shape + I/O contract matches `ONNXRunner` exactly: fixed-length int64 inputs, padded with
|
|
21
21
|
* zeros + attention_mask, output is a `logits` tensor of shape `[batch, seq, num_labels]`. See
|
|
22
22
|
* `@mailwoman/neural/onnx-runner` for the full export contract this file mirrors.
|
|
23
23
|
*/
|
|
@@ -25,14 +25,14 @@ import { ANCHOR_FEATURE_DIM, GAZETTEER_FEATURE_DIM, } from "@mailwoman/neural/br
|
|
|
25
25
|
import * as ort from "onnxruntime-web/webgpu";
|
|
26
26
|
export const DEFAULT_FIXED_SEQ_LEN = 128;
|
|
27
27
|
/** Apply `wasmPathsRoot` once at module init. Safe to call multiple times. */
|
|
28
|
-
function
|
|
28
|
+
function configureWASMPaths(root) {
|
|
29
29
|
if (!root)
|
|
30
30
|
return;
|
|
31
31
|
// onnxruntime-web ships this on `ort.env.wasm`. We assign directly rather than calling
|
|
32
|
-
// `
|
|
32
|
+
// `setWASMPaths` so it works across the slightly different shapes the typings have had.
|
|
33
33
|
ort.env.wasm.wasmPaths = root;
|
|
34
34
|
}
|
|
35
|
-
export class
|
|
35
|
+
export class WebONNXRunner {
|
|
36
36
|
modelBytes;
|
|
37
37
|
opts;
|
|
38
38
|
fixedSeqLen;
|
|
@@ -46,25 +46,25 @@ export class WebOnnxRunner {
|
|
|
46
46
|
}
|
|
47
47
|
/** Construct from already-fetched model bytes. */
|
|
48
48
|
static async fromBytes(modelBytes, opts = {}) {
|
|
49
|
-
|
|
50
|
-
const runner = new
|
|
49
|
+
configureWASMPaths(opts.wasmPathsRoot);
|
|
50
|
+
const runner = new WebONNXRunner(modelBytes, opts);
|
|
51
51
|
return runner;
|
|
52
52
|
}
|
|
53
53
|
/** Fetch the model from a URL and construct. */
|
|
54
|
-
static async
|
|
55
|
-
const res = await fetch(
|
|
54
|
+
static async fromURL(modelURL, opts = {}) {
|
|
55
|
+
const res = await fetch(modelURL);
|
|
56
56
|
if (!res.ok)
|
|
57
|
-
throw new Error(`fetch ${
|
|
57
|
+
throw new Error(`fetch ${modelURL} failed: ${res.status} ${res.statusText}`);
|
|
58
58
|
const bytes = new Uint8Array(await res.arrayBuffer());
|
|
59
|
-
return
|
|
59
|
+
return WebONNXRunner.fromBytes(bytes, opts);
|
|
60
60
|
}
|
|
61
61
|
async #ensureSession() {
|
|
62
62
|
if (this.#session)
|
|
63
63
|
return this.#session;
|
|
64
64
|
if (!this.#loadPromise) {
|
|
65
65
|
this.#loadPromise = (async () => {
|
|
66
|
-
const
|
|
67
|
-
if (
|
|
66
|
+
const wantWebGPU = this.opts.useWebGPU !== false;
|
|
67
|
+
if (wantWebGPU) {
|
|
68
68
|
try {
|
|
69
69
|
const session = await ort.InferenceSession.create(this.modelBytes, {
|
|
70
70
|
executionProviders: ["webgpu", "wasm"],
|
|
@@ -90,11 +90,10 @@ export class WebOnnxRunner {
|
|
|
90
90
|
return this.#loadPromise;
|
|
91
91
|
}
|
|
92
92
|
/**
|
|
93
|
-
* Names of the inputs the loaded ONNX graph declares. `null` until the session has been created
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
* mismatch ("the zero-fill trap"), not a quality-neutral degrade.
|
|
93
|
+
* Names of the inputs the loaded ONNX graph declares. `null` until the session has been created (first `infer()`
|
|
94
|
+
* call). Lets callers (e.g. the neural-web loader) detect anchor/gazetteer-trained models and warn loudly when the
|
|
95
|
+
* corresponding feature source wasn't provided — running such a model on the zero-filled fallback is the measured
|
|
96
|
+
* train/inference mismatch ("the zero-fill trap"), not a quality-neutral degrade.
|
|
98
97
|
*/
|
|
99
98
|
get inputNames() {
|
|
100
99
|
return this.#session?.inputNames ?? null;
|
|
@@ -112,7 +111,7 @@ export class WebOnnxRunner {
|
|
|
112
111
|
input_ids: new ort.Tensor("int64", padded, [1, this.fixedSeqLen]),
|
|
113
112
|
attention_mask: new ort.Tensor("int64", mask, [1, this.fixedSeqLen]),
|
|
114
113
|
};
|
|
115
|
-
// Anchor channel (#239/#240) — mirror of the node
|
|
114
|
+
// Anchor channel (#239/#240) — mirror of the node ONNXRunner. Feed the per-piece anchor when the
|
|
116
115
|
// caller supplies it; otherwise, for anchor-trained models (whose ONNX declares the inputs as
|
|
117
116
|
// mandatory), feed zeros — the confidence=0 identity / anchor-off path. Without this the session
|
|
118
117
|
// throws on the missing required inputs.
|
|
@@ -138,7 +137,7 @@ export class WebOnnxRunner {
|
|
|
138
137
|
]);
|
|
139
138
|
feeds.anchor_confidence = new ort.Tensor("float32", new Float32Array(this.fixedSeqLen), [1, this.fixedSeqLen]);
|
|
140
139
|
}
|
|
141
|
-
// Gazetteer-anchor channel (#464) — mirror of the node
|
|
140
|
+
// Gazetteer-anchor channel (#464) — mirror of the node ONNXRunner. Feed the per-piece clue when
|
|
142
141
|
// the caller supplies it AND the graph declares the inputs; for gazetteer-trained models with no
|
|
143
142
|
// clue data, feed zeros (the confidence=0 identity — a structural fallback only; see the loader's
|
|
144
143
|
// loud warning) so the session doesn't throw `input 'gazetteer_features' is missing in 'feeds'`.
|
|
@@ -179,7 +178,7 @@ export class WebOnnxRunner {
|
|
|
179
178
|
logits.push(row);
|
|
180
179
|
}
|
|
181
180
|
// Locale head (#511 Tier A): present on v1.1.0+ exports (shipped v4.3.0+), absent before.
|
|
182
|
-
// Mirrors the node
|
|
181
|
+
// Mirrors the node ONNXRunner — `addressSystemConventions: "auto"` depends on this surfacing.
|
|
183
182
|
const localeTensor = output["locale_logits"];
|
|
184
183
|
const localeLogits = localeTensor ? Array.from(localeTensor.data) : undefined;
|
|
185
184
|
return { logits, numLabels, ...(localeLogits ? { localeLogits } : {}) };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-onnx-runner.js","sourceRoot":"","sources":["../web-onnx-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EACN,kBAAkB,EAClB,qBAAqB,GAGrB,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,GAAG,MAAM,wBAAwB,CAAA;AAsB7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAA;AAExC,8EAA8E;AAC9E,SAAS,kBAAkB,CAAC,IAAwB;IACnD,IAAI,CAAC,IAAI;QAAE,OAAM;IACjB,uFAAuF;IACvF,wFAAwF;IACxF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;AAC9B,CAAC;AAOD,MAAM,OAAO,aAAa;IAOP;IACA;IAPF,WAAW,CAAQ;IAC5B,WAAW,GAAoC,IAAI,CAAA;IAC1D,QAAQ,GAAgC,IAAI,CAAA;IAC5C,YAAY,GAAyC,IAAI,CAAA;IAEzD,YACkB,UAAsB,EACtB,IAAuB;QADvB,eAAU,GAAV,UAAU,CAAY;QACtB,SAAI,GAAJ,IAAI,CAAmB;QAExC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,qBAAqB,CAAA;IAC7D,CAAC;IAED,kDAAkD;IAClD,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,UAAsB,EAAE,OAA0B,EAAE;QAC1E,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACtC,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"web-onnx-runner.js","sourceRoot":"","sources":["../web-onnx-runner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mailwoman/neural-web",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"description": "Browser-side mailwoman neural runtime. Pairs the existing tokenizer + decoder with an onnxruntime-web inference path (WebGPU primary, WASM SIMD fallback). Drop-in for @mailwoman/neural when targeting a static-asset deploy (Phase B of the demo plan).",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"repository": {
|
|
@@ -8,16 +8,6 @@
|
|
|
8
8
|
"url": "https://github.com/sister-software/mailwoman.git",
|
|
9
9
|
"directory": "neural-web"
|
|
10
10
|
},
|
|
11
|
-
"type": "module",
|
|
12
|
-
"exports": {
|
|
13
|
-
"./package.json": "./package.json",
|
|
14
|
-
".": "./out/index.js"
|
|
15
|
-
},
|
|
16
|
-
"dependencies": {
|
|
17
|
-
"@mailwoman/core": "4.16.1",
|
|
18
|
-
"@mailwoman/neural": "4.16.1",
|
|
19
|
-
"onnxruntime-web": "1.25.0-dev.20260327-722743c0e2"
|
|
20
|
-
},
|
|
21
11
|
"files": [
|
|
22
12
|
"out/**/*.js",
|
|
23
13
|
"out/**/*.js.map",
|
|
@@ -25,7 +15,17 @@
|
|
|
25
15
|
"out/**/*.d.ts.map",
|
|
26
16
|
"README.md"
|
|
27
17
|
],
|
|
18
|
+
"type": "module",
|
|
19
|
+
"exports": {
|
|
20
|
+
"./package.json": "./package.json",
|
|
21
|
+
".": "./out/index.js"
|
|
22
|
+
},
|
|
28
23
|
"publishConfig": {
|
|
29
24
|
"access": "public"
|
|
25
|
+
},
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"@mailwoman/core": "5.0.0",
|
|
28
|
+
"@mailwoman/neural": "5.0.0",
|
|
29
|
+
"onnxruntime-web": "1.25.0-dev.20260327-722743c0e2"
|
|
30
30
|
}
|
|
31
31
|
}
|