interscript 3.2.0 → 4.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/dist/ml/index.d.ts +0 -2
- package/dist/ml/index.d.ts.map +1 -1
- package/dist/ml/index.js +0 -2
- package/dist/ml/index.js.map +1 -1
- package/dist/ml/provision/index.d.ts +7 -10
- package/dist/ml/provision/index.d.ts.map +1 -1
- package/dist/ml/provision/index.js +12 -55
- package/dist/ml/provision/index.js.map +1 -1
- package/dist/ml/provision/types.d.ts +3 -0
- package/dist/ml/provision/types.d.ts.map +1 -0
- package/dist/ml/provision/types.js +2 -0
- package/dist/ml/provision/types.js.map +1 -0
- package/dist/runtime/interpreter.js +10 -5
- package/dist/runtime/interpreter.js.map +1 -1
- package/package.json +1 -1
- package/dist/ml/provision/base.d.ts +0 -14
- package/dist/ml/provision/base.d.ts.map +0 -1
- package/dist/ml/provision/base.js +0 -19
- package/dist/ml/provision/base.js.map +0 -1
- package/dist/ml/provision/manifest.d.ts +0 -79
- package/dist/ml/provision/manifest.d.ts.map +0 -1
- package/dist/ml/provision/manifest.js +0 -122
- package/dist/ml/provision/manifest.js.map +0 -1
package/dist/ml/index.d.ts
CHANGED
|
@@ -17,8 +17,6 @@
|
|
|
17
17
|
export type { Model, ModelArtifacts, ModelFactory, ModelKind, ModelLoadParams, ModelRef, InferenceInputs, InferenceOutputs, InferenceSession, Tensor, } from "./types.js";
|
|
18
18
|
export { registerModel, loadModel, registeredKinds, resetModels } from "./registry.js";
|
|
19
19
|
export { createSession, detectBackend } from "./session/index.js";
|
|
20
|
-
export { setModelBase, getModelBase } from "./provision/base.js";
|
|
21
|
-
export { loadManifest, resolveManifestEntry, artifactUrls, sidecarFilenames, setInlineManifest, setManifestUrl, type AssetVariant, type Manifest, type ManifestModelEntry, } from "./provision/manifest.js";
|
|
22
20
|
/**
|
|
23
21
|
* The IMF v1 registry — models.yaml resolution over GitHub Releases
|
|
24
22
|
* (sha256-sidecar-verified). This is the canonical way to load models
|
package/dist/ml/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ml/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,YAAY,EACV,KAAK,EACL,cAAc,EACd,YAAY,EACZ,SAAS,EACT,eAAe,EACf,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,MAAM,GACP,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEtF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEjE
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ml/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,YAAY,EACV,KAAK,EACL,cAAc,EACd,YAAY,EACZ,SAAS,EACT,eAAe,EACf,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,MAAM,GACP,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEtF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEjE;;;;GAIG;AACH,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AAIrC,OAAO,0BAA0B,CAAA;AACjC,OAAO,2BAA2B,CAAA"}
|
package/dist/ml/index.js
CHANGED
|
@@ -16,8 +16,6 @@
|
|
|
16
16
|
*/
|
|
17
17
|
export { registerModel, loadModel, registeredKinds, resetModels } from "./registry.js";
|
|
18
18
|
export { createSession, detectBackend } from "./session/index.js";
|
|
19
|
-
export { setModelBase, getModelBase } from "./provision/base.js";
|
|
20
|
-
export { loadManifest, resolveManifestEntry, artifactUrls, sidecarFilenames, setInlineManifest, setManifestUrl, } from "./provision/manifest.js";
|
|
21
19
|
/**
|
|
22
20
|
* The IMF v1 registry — models.yaml resolution over GitHub Releases
|
|
23
21
|
* (sha256-sidecar-verified). This is the canonical way to load models
|
package/dist/ml/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ml/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAeH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEtF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEjE
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ml/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAeH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEtF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEjE;;;;GAIG;AACH,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AAErC,sEAAsE;AACtE,oDAAoD;AACpD,OAAO,0BAA0B,CAAA;AACjC,OAAO,2BAA2B,CAAA"}
|
|
@@ -6,15 +6,13 @@
|
|
|
6
6
|
* browsers); falls back to filesystem reads in Node when given a
|
|
7
7
|
* `file:` or relative URL.
|
|
8
8
|
*
|
|
9
|
-
* The manifest
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* Adding a new provision source (e.g. IPFS, BitTorrent) = adding a
|
|
13
|
-
* new provisioner file. Existing code never changes (OCP).
|
|
9
|
+
* The manifest-based resolution layer was removed in 4.0.0: models
|
|
10
|
+
* resolve through the IMF registry (`imf`, GitHub Releases index,
|
|
11
|
+
* sha256-verified) or an explicit `url` on the ModelRef.
|
|
14
12
|
*/
|
|
15
13
|
import type { ModelArtifacts, ModelRef } from "../types.js";
|
|
16
14
|
import type { InferenceSession } from "../session/index.js";
|
|
17
|
-
import {
|
|
15
|
+
import type { AssetFormat, AssetVariant } from "./types.js";
|
|
18
16
|
export interface ProvisionedModel {
|
|
19
17
|
readonly session: InferenceSession;
|
|
20
18
|
readonly artifacts: ModelArtifacts;
|
|
@@ -50,10 +48,9 @@ export interface ProvisionOptions {
|
|
|
50
48
|
readonly outputNames?: readonly string[];
|
|
51
49
|
}
|
|
52
50
|
/**
|
|
53
|
-
* Provision a model from
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* artifacts (vocab, config, checksum) in parallel.
|
|
51
|
+
* Provision a model from an explicit URL. Downloads the model file,
|
|
52
|
+
* opens an inference session, and returns it with any artifacts the
|
|
53
|
+
* caller fetches separately.
|
|
57
54
|
*
|
|
58
55
|
* In Node, can read from the filesystem if `url` starts with `file:`
|
|
59
56
|
* or is a relative path.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ml/provision/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ml/provision/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAA;IAClC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAA;CACnC;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAA;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAC7B,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAA;IACxD;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACzC;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,QAAQ,EACb,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAwB3B"}
|
|
@@ -6,48 +6,29 @@
|
|
|
6
6
|
* browsers); falls back to filesystem reads in Node when given a
|
|
7
7
|
* `file:` or relative URL.
|
|
8
8
|
*
|
|
9
|
-
* The manifest
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* Adding a new provision source (e.g. IPFS, BitTorrent) = adding a
|
|
13
|
-
* new provisioner file. Existing code never changes (OCP).
|
|
9
|
+
* The manifest-based resolution layer was removed in 4.0.0: models
|
|
10
|
+
* resolve through the IMF registry (`imf`, GitHub Releases index,
|
|
11
|
+
* sha256-verified) or an explicit `url` on the ModelRef.
|
|
14
12
|
*/
|
|
15
13
|
import { createSession } from "../session/index.js";
|
|
16
|
-
import { artifactUrls, resolveManifestEntry, sidecarFilenames, } from "./manifest.js";
|
|
17
14
|
/**
|
|
18
|
-
* Provision a model from
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* artifacts (vocab, config, checksum) in parallel.
|
|
15
|
+
* Provision a model from an explicit URL. Downloads the model file,
|
|
16
|
+
* opens an inference session, and returns it with any artifacts the
|
|
17
|
+
* caller fetches separately.
|
|
22
18
|
*
|
|
23
19
|
* In Node, can read from the filesystem if `url` starts with `file:`
|
|
24
20
|
* or is a relative path.
|
|
25
21
|
*/
|
|
26
22
|
export async function provisionModel(ref, opts = {}) {
|
|
27
|
-
const variant = opts.variant ?? "q8";
|
|
28
23
|
const format = opts.format ?? "onnx";
|
|
29
24
|
const webgpu = opts.webgpu ?? true;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
25
|
+
if (!ref.url) {
|
|
26
|
+
throw new Error(`No url on ModelRef kind=${ref.kind} id=${ref.id}. Load models via ` +
|
|
27
|
+
`\`import { imf } from "interscript/ml"\` and \`imf.resolve("${ref.id}")\` ` +
|
|
28
|
+
`(GitHub Releases index, sha256-verified), or pass an explicit \`url\` on the ModelRef.`);
|
|
29
|
+
}
|
|
30
|
+
const modelBuffer = await fetchBytesWithFallback(ref.url);
|
|
33
31
|
const artifacts = {};
|
|
34
|
-
await Promise.all(sidecars.map(async ({ filename, url }) => {
|
|
35
|
-
try {
|
|
36
|
-
const bytes = await fetchBytesWithFallback(url);
|
|
37
|
-
if (filename.endsWith(".json") ||
|
|
38
|
-
filename.endsWith(".yaml") ||
|
|
39
|
-
filename.endsWith(".yml") ||
|
|
40
|
-
filename.endsWith(".sha256")) {
|
|
41
|
-
artifacts[filename] = new TextDecoder().decode(bytes);
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
artifacts[filename] = bytes;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
catch {
|
|
48
|
-
// Sidecars are optional; missing ones are skipped.
|
|
49
|
-
}
|
|
50
|
-
}));
|
|
51
32
|
const sessionOpts = { webgpu };
|
|
52
33
|
if (format === "tflite") {
|
|
53
34
|
sessionOpts.runtime = "litert";
|
|
@@ -61,30 +42,6 @@ export async function provisionModel(ref, opts = {}) {
|
|
|
61
42
|
const session = await createSession(modelBuffer, sessionOpts);
|
|
62
43
|
return { session, artifacts };
|
|
63
44
|
}
|
|
64
|
-
async function resolveModelUrl(ref, variant, format) {
|
|
65
|
-
const entry = await resolveManifestEntry(ref.kind, ref.id);
|
|
66
|
-
if (!entry) {
|
|
67
|
-
throw new Error(`No manifest entry for kind=${ref.kind} id=${ref.id}. ` +
|
|
68
|
-
`Pass an explicit \`url\` on the ModelRef or pin a task version in the manifest.`);
|
|
69
|
-
}
|
|
70
|
-
const { primary } = artifactUrls(entry, variant, format);
|
|
71
|
-
return primary;
|
|
72
|
-
}
|
|
73
|
-
async function resolveSidecarUrls(ref, variant, format) {
|
|
74
|
-
// If the caller provided an explicit URL, skip manifest-based sidecar
|
|
75
|
-
// resolution — they've taken control of provisioning.
|
|
76
|
-
if (ref.url)
|
|
77
|
-
return [];
|
|
78
|
-
const entry = await resolveManifestEntry(ref.kind, ref.id);
|
|
79
|
-
if (!entry)
|
|
80
|
-
return [];
|
|
81
|
-
const { primary, assetName } = artifactUrls(entry, variant, format);
|
|
82
|
-
const base = primary.slice(0, primary.lastIndexOf("/") + 1);
|
|
83
|
-
return sidecarFilenames(entry, variant, format).map((filename) => ({
|
|
84
|
-
filename,
|
|
85
|
-
url: `${base}${filename.startsWith(assetName) ? filename : filename}`,
|
|
86
|
-
}));
|
|
87
|
-
}
|
|
88
45
|
/**
|
|
89
46
|
* Fetch bytes from a URL. Tries the URL as-given; if it's the CDN
|
|
90
47
|
* primary and fails, the caller can supply a fallback URL via the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ml/provision/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ml/provision/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAuCnD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAa,EACb,OAAyB,EAAE;IAE3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAA;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAA;IAElC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,2BAA2B,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,oBAAoB;YAClE,+DAA+D,GAAG,CAAC,EAAE,OAAO;YAC5E,wFAAwF,CAC3F,CAAA;IACH,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACzD,MAAM,SAAS,GAAwC,EAAE,CAAA;IAEzD,MAAM,WAAW,GAA4B,EAAE,MAAM,EAAE,CAAA;IACvD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAA;QAC9B,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS;YAAE,WAAW,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAA;QAChG,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QAC3E,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;YAAE,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;IAChF,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;IAC7D,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAA;AAC/B,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,sBAAsB,CAAC,GAAW;IAC/C,uBAAuB;IACvB,IACE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;QACvB,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,EACjF,CAAC;QACD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;QACrD,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QACzD,OAAO,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IAC7C,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAA;IAC5E,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;AAChD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ml/provision/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAA;AACxD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ml/provision/types.ts"],"names":[],"mappings":""}
|
|
@@ -115,13 +115,18 @@ async function executeFuncallAsync(rule, ctx) {
|
|
|
115
115
|
ctx.current = await rababa(ctx.current, rule.kwargs);
|
|
116
116
|
return;
|
|
117
117
|
}
|
|
118
|
-
// Other ASYNC_FUNCTIONS (secryst, etc.)
|
|
119
|
-
//
|
|
118
|
+
// Other ASYNC_FUNCTIONS (secryst, etc.) resolve model ids through
|
|
119
|
+
// the IMF registry (GitHub Releases index, sha256-verified).
|
|
120
120
|
if (ASYNC_FUNCTIONS.has(rule.name)) {
|
|
121
|
-
const {
|
|
121
|
+
const { imf } = await import("../ml/index.js");
|
|
122
122
|
const modelId = (rule.kwargs?.config ?? rule.kwargs?.model ?? "default");
|
|
123
|
-
const model = await
|
|
124
|
-
|
|
123
|
+
const model = await imf.IMFModel.load(modelId);
|
|
124
|
+
try {
|
|
125
|
+
ctx.current = await model.translate(ctx.current);
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
await model.dispose();
|
|
129
|
+
}
|
|
125
130
|
return;
|
|
126
131
|
}
|
|
127
132
|
// Fall back to the sync funcall executor for all other functions.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interpreter.js","sourceRoot":"","sources":["../../src/runtime/interpreter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"interpreter.js","sourceRoot":"","sources":["../../src/runtime/interpreter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Base URL for model artifacts. Owned here so every provisioner
|
|
3
|
-
* (HTTP fetcher, manifest loader, future IPFS/Bittorrent) reads
|
|
4
|
-
* from the same source. No circular deps.
|
|
5
|
-
*
|
|
6
|
-
* Default points at the jsDelivr mirror of `interscript/ml-models`
|
|
7
|
-
* — works without npm install, edge-cached globally.
|
|
8
|
-
*
|
|
9
|
-
* Override at runtime with `setModelBase()` for self-hosted mirrors,
|
|
10
|
-
* air-gapped envs, or staging deployments.
|
|
11
|
-
*/
|
|
12
|
-
export declare function setModelBase(url: string): void;
|
|
13
|
-
export declare function getModelBase(): string;
|
|
14
|
-
//# sourceMappingURL=base.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/ml/provision/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Base URL for model artifacts. Owned here so every provisioner
|
|
3
|
-
* (HTTP fetcher, manifest loader, future IPFS/Bittorrent) reads
|
|
4
|
-
* from the same source. No circular deps.
|
|
5
|
-
*
|
|
6
|
-
* Default points at the jsDelivr mirror of `interscript/ml-models`
|
|
7
|
-
* — works without npm install, edge-cached globally.
|
|
8
|
-
*
|
|
9
|
-
* Override at runtime with `setModelBase()` for self-hosted mirrors,
|
|
10
|
-
* air-gapped envs, or staging deployments.
|
|
11
|
-
*/
|
|
12
|
-
let modelBase = "https://cdn.jsdelivr.net/gh/interscript/ml-models@main/npm/models";
|
|
13
|
-
export function setModelBase(url) {
|
|
14
|
-
modelBase = url.replace(/\/$/, "");
|
|
15
|
-
}
|
|
16
|
-
export function getModelBase() {
|
|
17
|
-
return modelBase;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=base.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/ml/provision/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,IAAI,SAAS,GAAG,mEAAmE,CAAA;AAEnF,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,SAAS,CAAA;AAClB,CAAC"}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Manifest-driven model resolution.
|
|
3
|
-
*
|
|
4
|
-
* The source of truth for "what model version is current" lives in
|
|
5
|
-
* the `@interscript/models` npm package (a tiny JSON manifest kept
|
|
6
|
-
* in lockstep with GH Releases in `interscript/ml-models`).
|
|
7
|
-
*
|
|
8
|
-
* Resolution order for the manifest itself:
|
|
9
|
-
* 1. Programmatically injected via `setManifestUrl()` or
|
|
10
|
-
* `setInlineManifest()` (tests, air-gapped envs).
|
|
11
|
-
* 2. The `@interscript/models` package, when installed.
|
|
12
|
-
* 3. A remote JSON URL on the CDN (`manifest.json` next to the
|
|
13
|
-
* release assets).
|
|
14
|
-
*
|
|
15
|
-
* See `ml-models/TODO.distribution/04-npm-packages.md` for the
|
|
16
|
-
* full MECE breakdown of who owns what.
|
|
17
|
-
*/
|
|
18
|
-
/**
|
|
19
|
-
* Per-task manifest entry. Matches `npm/models/manifest.json` shape.
|
|
20
|
-
*/
|
|
21
|
-
export interface ManifestModelEntry {
|
|
22
|
-
readonly status: "preview" | "stable" | "deprecated";
|
|
23
|
-
readonly version: string;
|
|
24
|
-
readonly note?: string;
|
|
25
|
-
readonly cdn_base: string;
|
|
26
|
-
readonly github_base: string;
|
|
27
|
-
}
|
|
28
|
-
export interface Manifest {
|
|
29
|
-
readonly schema_version: number;
|
|
30
|
-
readonly models: Readonly<Record<string, ManifestModelEntry>>;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Asset variants a release may ship. `fp32` (no suffix) is the
|
|
34
|
-
* default; q8 is the browser-optimized default.
|
|
35
|
-
*/
|
|
36
|
-
export type AssetVariant = "fp32" | "q8" | "q4" | "fp16";
|
|
37
|
-
/**
|
|
38
|
-
* Serialization format. ONNX is the historical default; LiteRT (.tflite)
|
|
39
|
-
* is the 2026 alternative backed by Google's LiteRT.js runtime.
|
|
40
|
-
*
|
|
41
|
-
* The two formats are orthogonal to `AssetVariant` — both can be
|
|
42
|
-
* quantized to q8, both can be fp32. The runtime that loads the file
|
|
43
|
-
* is what differs.
|
|
44
|
-
*/
|
|
45
|
-
export type AssetFormat = "onnx" | "tflite";
|
|
46
|
-
export declare function setInlineManifest(m: Manifest | null): void;
|
|
47
|
-
export declare function setManifestUrl(url: string | null): void;
|
|
48
|
-
/**
|
|
49
|
-
* Load the manifest. Cached after first call; bust the cache with
|
|
50
|
-
* `setInlineManifest()` or `setManifestUrl()`.
|
|
51
|
-
*/
|
|
52
|
-
export declare function loadManifest(): Promise<Manifest>;
|
|
53
|
-
/**
|
|
54
|
-
* Resolve a `(kind, id)` ref to a manifest entry. The `id` field on
|
|
55
|
-
* a ModelRef carries the task name (e.g. "rababa_arabic"); the kind
|
|
56
|
-
* is redundant but kept for backwards compatibility.
|
|
57
|
-
*
|
|
58
|
-
* Returns `null` if the task isn't in the manifest. Callers decide
|
|
59
|
-
* whether that's an error or a "use bundled fallback" signal.
|
|
60
|
-
*/
|
|
61
|
-
export declare function resolveManifestEntry(kind: string, id: string): Promise<ManifestModelEntry | null>;
|
|
62
|
-
/**
|
|
63
|
-
* Build concrete artifact URLs for a model. Prefers the CDN base;
|
|
64
|
-
* GitHub Releases base is the fallback (slower, but no CDN cache).
|
|
65
|
-
*
|
|
66
|
-
* Both URLs use the same asset naming convention so a downloader
|
|
67
|
-
* can verify checksums identically against either source.
|
|
68
|
-
*/
|
|
69
|
-
export declare function artifactUrls(entry: ManifestModelEntry, variant?: AssetVariant, format?: AssetFormat): {
|
|
70
|
-
primary: string;
|
|
71
|
-
fallback: string;
|
|
72
|
-
assetName: string;
|
|
73
|
-
};
|
|
74
|
-
/**
|
|
75
|
-
* Sidecar artifacts that ship with every release. These names match
|
|
76
|
-
* the release pipeline in `ml-models/.github/workflows/release.yml`.
|
|
77
|
-
*/
|
|
78
|
-
export declare function sidecarFilenames(entry: ManifestModelEntry, variant?: AssetVariant, format?: AssetFormat): readonly string[];
|
|
79
|
-
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/ml/provision/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAA;IACpD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAA;CAC9D;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAA;AAExD;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAA;AAkB3C,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAG1D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAGvD;AAWD;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CAetD;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAIpC;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,kBAAkB,EACzB,OAAO,GAAE,YAAmB,EAC5B,MAAM,GAAE,WAAoB,GAC3B;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAS1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,kBAAkB,EACzB,OAAO,GAAE,YAAmB,EAC5B,MAAM,GAAE,WAAoB,GAC3B,SAAS,MAAM,EAAE,CAGnB"}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Manifest-driven model resolution.
|
|
3
|
-
*
|
|
4
|
-
* The source of truth for "what model version is current" lives in
|
|
5
|
-
* the `@interscript/models` npm package (a tiny JSON manifest kept
|
|
6
|
-
* in lockstep with GH Releases in `interscript/ml-models`).
|
|
7
|
-
*
|
|
8
|
-
* Resolution order for the manifest itself:
|
|
9
|
-
* 1. Programmatically injected via `setManifestUrl()` or
|
|
10
|
-
* `setInlineManifest()` (tests, air-gapped envs).
|
|
11
|
-
* 2. The `@interscript/models` package, when installed.
|
|
12
|
-
* 3. A remote JSON URL on the CDN (`manifest.json` next to the
|
|
13
|
-
* release assets).
|
|
14
|
-
*
|
|
15
|
-
* See `ml-models/TODO.distribution/04-npm-packages.md` for the
|
|
16
|
-
* full MECE breakdown of who owns what.
|
|
17
|
-
*/
|
|
18
|
-
import { getModelBase } from "./base.js";
|
|
19
|
-
const VARIANT_SUFFIX = {
|
|
20
|
-
fp32: "",
|
|
21
|
-
q8: "-q8",
|
|
22
|
-
q4: "-q4",
|
|
23
|
-
fp16: "-fp16",
|
|
24
|
-
};
|
|
25
|
-
const FORMAT_EXTENSION = {
|
|
26
|
-
onnx: ".onnx",
|
|
27
|
-
tflite: ".tflite",
|
|
28
|
-
};
|
|
29
|
-
let cachedManifest = null;
|
|
30
|
-
let inlineManifest = null;
|
|
31
|
-
let manifestUrlOverride = null;
|
|
32
|
-
export function setInlineManifest(m) {
|
|
33
|
-
inlineManifest = m;
|
|
34
|
-
cachedManifest = null;
|
|
35
|
-
}
|
|
36
|
-
export function setManifestUrl(url) {
|
|
37
|
-
manifestUrlOverride = url;
|
|
38
|
-
cachedManifest = null;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Default manifest URL — sits next to release assets on the CDN.
|
|
42
|
-
* Points at the jsDelivr mirror of the ml-models repo so it works
|
|
43
|
-
* with zero npm install.
|
|
44
|
-
*/
|
|
45
|
-
function defaultManifestUrl() {
|
|
46
|
-
return `${getModelBase()}/npm/models/manifest.json`;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Load the manifest. Cached after first call; bust the cache with
|
|
50
|
-
* `setInlineManifest()` or `setManifestUrl()`.
|
|
51
|
-
*/
|
|
52
|
-
export async function loadManifest() {
|
|
53
|
-
if (cachedManifest)
|
|
54
|
-
return cachedManifest;
|
|
55
|
-
if (inlineManifest) {
|
|
56
|
-
cachedManifest = inlineManifest;
|
|
57
|
-
return cachedManifest;
|
|
58
|
-
}
|
|
59
|
-
const url = manifestUrlOverride ?? defaultManifestUrl();
|
|
60
|
-
const res = await fetch(url);
|
|
61
|
-
if (!res.ok) {
|
|
62
|
-
throw new Error(`Failed to load model manifest from ${url}: ${res.status} ${res.statusText}`);
|
|
63
|
-
}
|
|
64
|
-
const json = (await res.json());
|
|
65
|
-
cachedManifest = json;
|
|
66
|
-
return json;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Resolve a `(kind, id)` ref to a manifest entry. The `id` field on
|
|
70
|
-
* a ModelRef carries the task name (e.g. "rababa_arabic"); the kind
|
|
71
|
-
* is redundant but kept for backwards compatibility.
|
|
72
|
-
*
|
|
73
|
-
* Returns `null` if the task isn't in the manifest. Callers decide
|
|
74
|
-
* whether that's an error or a "use bundled fallback" signal.
|
|
75
|
-
*/
|
|
76
|
-
export async function resolveManifestEntry(kind, id) {
|
|
77
|
-
const manifest = await loadManifest();
|
|
78
|
-
const taskKey = id.startsWith(`${kind}_`) ? id : `${kind}_${id}`;
|
|
79
|
-
return manifest.models[taskKey] ?? manifest.models[id] ?? null;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Build concrete artifact URLs for a model. Prefers the CDN base;
|
|
83
|
-
* GitHub Releases base is the fallback (slower, but no CDN cache).
|
|
84
|
-
*
|
|
85
|
-
* Both URLs use the same asset naming convention so a downloader
|
|
86
|
-
* can verify checksums identically against either source.
|
|
87
|
-
*/
|
|
88
|
-
export function artifactUrls(entry, variant = "q8", format = "onnx") {
|
|
89
|
-
const assetName = assetNameFor(entry, variant, format);
|
|
90
|
-
const versionedCdn = entry.cdn_base.replace("{version}", entry.version);
|
|
91
|
-
const versionedGithub = entry.github_base.replace("{version}", entry.version);
|
|
92
|
-
return {
|
|
93
|
-
primary: `${versionedCdn}${assetName}`,
|
|
94
|
-
fallback: `${versionedGithub}${assetName}`,
|
|
95
|
-
assetName,
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Sidecar artifacts that ship with every release. These names match
|
|
100
|
-
* the release pipeline in `ml-models/.github/workflows/release.yml`.
|
|
101
|
-
*/
|
|
102
|
-
export function sidecarFilenames(entry, variant = "q8", format = "onnx") {
|
|
103
|
-
const asset = assetNameFor(entry, variant, format);
|
|
104
|
-
return [`${asset}.sha256`, "vocab.json", "config.json"];
|
|
105
|
-
}
|
|
106
|
-
function assetNameFor(entry, variant, format = "onnx") {
|
|
107
|
-
const task = taskNameFromBases(entry);
|
|
108
|
-
return `${task}${VARIANT_SUFFIX[variant]}${FORMAT_EXTENSION[format]}`;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Best-effort task name extraction from `cdn_base`/`github_base`.
|
|
112
|
-
* Both bases end with `<task>-v{version}/`, so we slice off the
|
|
113
|
-
* trailing version segment.
|
|
114
|
-
*/
|
|
115
|
-
function taskNameFromBases(entry) {
|
|
116
|
-
const lastSegment = entry.github_base.split("/").filter(Boolean).pop() ?? "";
|
|
117
|
-
const suffix = "-v{version}";
|
|
118
|
-
if (lastSegment.endsWith(suffix))
|
|
119
|
-
return lastSegment.slice(0, -suffix.length);
|
|
120
|
-
throw new Error(`Cannot extract task name from manifest entry. github_base=${entry.github_base}`);
|
|
121
|
-
}
|
|
122
|
-
//# sourceMappingURL=manifest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/ml/provision/manifest.ts"],"names":[],"mappings":"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"}
|