@missionsquad/browserai 0.1.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/LICENSE +15 -0
- package/README.md +229 -0
- package/dist/audio/clip.d.ts +51 -0
- package/dist/audio/clip.d.ts.map +1 -0
- package/dist/audio/clip.js +71 -0
- package/dist/audio/clip.js.map +1 -0
- package/dist/audio/decode.d.ts +7 -0
- package/dist/audio/decode.d.ts.map +1 -0
- package/dist/audio/decode.js +19 -0
- package/dist/audio/decode.js.map +1 -0
- package/dist/audio/pcm.d.ts +13 -0
- package/dist/audio/pcm.d.ts.map +1 -0
- package/dist/audio/pcm.js +66 -0
- package/dist/audio/pcm.js.map +1 -0
- package/dist/audio/recorder.d.ts +40 -0
- package/dist/audio/recorder.d.ts.map +1 -0
- package/dist/audio/recorder.js +127 -0
- package/dist/audio/recorder.js.map +1 -0
- package/dist/audio/streaming-player.d.ts +29 -0
- package/dist/audio/streaming-player.d.ts.map +1 -0
- package/dist/audio/streaming-player.js +82 -0
- package/dist/audio/streaming-player.js.map +1 -0
- package/dist/client.d.ts +195 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +638 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +81 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +19 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +52 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +74 -0
- package/dist/errors.js.map +1 -0
- package/dist/events.d.ts +18 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +43 -0
- package/dist/events.js.map +1 -0
- package/dist/generation.d.ts +12 -0
- package/dist/generation.d.ts.map +1 -0
- package/dist/generation.js +30 -0
- package/dist/generation.js.map +1 -0
- package/dist/hardware.d.ts +23 -0
- package/dist/hardware.d.ts.map +1 -0
- package/dist/hardware.js +150 -0
- package/dist/hardware.js.map +1 -0
- package/dist/history.d.ts +81 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +193 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/inference.d.ts +89 -0
- package/dist/inference.d.ts.map +1 -0
- package/dist/inference.js +411 -0
- package/dist/inference.js.map +1 -0
- package/dist/json.d.ts +22 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +145 -0
- package/dist/json.js.map +1 -0
- package/dist/metrics.d.ts +18 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +59 -0
- package/dist/metrics.js.map +1 -0
- package/dist/model-cache.d.ts +49 -0
- package/dist/model-cache.d.ts.map +1 -0
- package/dist/model-cache.js +511 -0
- package/dist/model-cache.js.map +1 -0
- package/dist/model-source.d.ts +27 -0
- package/dist/model-source.d.ts.map +1 -0
- package/dist/model-source.js +110 -0
- package/dist/model-source.js.map +1 -0
- package/dist/models.d.ts +103 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +1052 -0
- package/dist/models.js.map +1 -0
- package/dist/multimodal.d.ts +261 -0
- package/dist/multimodal.d.ts.map +1 -0
- package/dist/multimodal.js +506 -0
- package/dist/multimodal.js.map +1 -0
- package/dist/prompt.d.ts +13 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +32 -0
- package/dist/prompt.js.map +1 -0
- package/dist/proxy-verify.d.ts +10 -0
- package/dist/proxy-verify.d.ts.map +1 -0
- package/dist/proxy-verify.js +98 -0
- package/dist/proxy-verify.js.map +1 -0
- package/dist/schema-validator.d.ts +6 -0
- package/dist/schema-validator.d.ts.map +1 -0
- package/dist/schema-validator.js +104 -0
- package/dist/schema-validator.js.map +1 -0
- package/dist/schema.d.ts +98 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +115 -0
- package/dist/schema.js.map +1 -0
- package/dist/text-utils.d.ts +8 -0
- package/dist/text-utils.d.ts.map +1 -0
- package/dist/text-utils.js +14 -0
- package/dist/text-utils.js.map +1 -0
- package/dist/voice/helpers.d.ts +35 -0
- package/dist/voice/helpers.d.ts.map +1 -0
- package/dist/voice/helpers.js +49 -0
- package/dist/voice/helpers.js.map +1 -0
- package/dist/voice/voice-pipeline.d.ts +155 -0
- package/dist/voice/voice-pipeline.d.ts.map +1 -0
- package/dist/voice/voice-pipeline.js +407 -0
- package/dist/voice/voice-pipeline.js.map +1 -0
- package/dist/webllm.worker.d.ts +2 -0
- package/dist/webllm.worker.d.ts.map +1 -0
- package/dist/webllm.worker.js +8 -0
- package/dist/webllm.worker.js.map +1 -0
- package/package.json +62 -0
- package/src/audio/clip.ts +94 -0
- package/src/audio/decode.ts +19 -0
- package/src/audio/pcm.ts +62 -0
- package/src/audio/recorder.ts +146 -0
- package/src/audio/streaming-player.ts +99 -0
- package/src/client.ts +784 -0
- package/src/config.ts +104 -0
- package/src/errors.ts +81 -0
- package/src/events.ts +53 -0
- package/src/generation.ts +39 -0
- package/src/hardware.ts +193 -0
- package/src/history.ts +257 -0
- package/src/index.ts +203 -0
- package/src/inference.ts +579 -0
- package/src/json.ts +169 -0
- package/src/metrics.ts +63 -0
- package/src/model-cache.ts +637 -0
- package/src/model-source.ts +142 -0
- package/src/models.ts +1171 -0
- package/src/multimodal.ts +697 -0
- package/src/prompt.ts +33 -0
- package/src/proxy-verify.ts +113 -0
- package/src/schema-validator.ts +117 -0
- package/src/schema.ts +118 -0
- package/src/text-utils.ts +12 -0
- package/src/voice/helpers.ts +59 -0
- package/src/voice/voice-pipeline.ts +513 -0
- package/src/webllm.worker.ts +9 -0
- package/worker-template/README.md +39 -0
- package/worker-template/cloudflare-worker.ts +389 -0
- package/worker-template/wrangler.jsonc +19 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { ModelPreset } from "./models.js";
|
|
2
|
+
import type { StorageLike } from "./config.js";
|
|
3
|
+
/**
|
|
4
|
+
* Run-history persistence + aggregation. Ported from small-ai with the storage injected: pass any
|
|
5
|
+
* `StorageLike` (or `null` for in-memory only); the default is `globalThis.localStorage` when present.
|
|
6
|
+
*/
|
|
7
|
+
/** Suggested task keys for logged runs (hosts may use their own strings). */
|
|
8
|
+
export type RunCaseKey = "json" | "chat" | "summarize" | "classify" | "qa" | "voice" | "vision";
|
|
9
|
+
export type ModelVendor = "qwen" | "google" | "meta" | "openai" | "ibm" | "microsoft" | "nvidia" | "liquid" | "huggingface" | "mistral" | "other";
|
|
10
|
+
/**
|
|
11
|
+
* One logged generation. This is the persisted shape, so every field is a primitive and the
|
|
12
|
+
* set is intentionally minimal: exactly what comparison views need to rebuild their aggregates
|
|
13
|
+
* (decode/ttft by model, run log) without storing full prompts/outputs. Storing raw text or
|
|
14
|
+
* per-token arrays would blow up the storage footprint, so those are excluded.
|
|
15
|
+
*/
|
|
16
|
+
export type RunRecord = {
|
|
17
|
+
/** Epoch milliseconds. */
|
|
18
|
+
ts: number;
|
|
19
|
+
/** Model short name, e.g. "Qwen3.5 0.8B". */
|
|
20
|
+
model: string;
|
|
21
|
+
/** Derived vendor bucket for filtering/labels. */
|
|
22
|
+
vendor: ModelVendor;
|
|
23
|
+
/** Backend used for the run. */
|
|
24
|
+
backend: "webllm" | "transformers-js";
|
|
25
|
+
/** Task key ({@link RunCaseKey} suggested; any non-empty string accepted). */
|
|
26
|
+
case: string;
|
|
27
|
+
promptTokens: number;
|
|
28
|
+
completionTokens: number;
|
|
29
|
+
/** Decode speed in tokens/sec. */
|
|
30
|
+
decode: number;
|
|
31
|
+
/** Time to first token in seconds. */
|
|
32
|
+
ttft: number;
|
|
33
|
+
/** Measured wall-clock time in milliseconds. */
|
|
34
|
+
totalMs: number;
|
|
35
|
+
/** Measured completion tokens/sec over wall-clock time. */
|
|
36
|
+
measured: number;
|
|
37
|
+
};
|
|
38
|
+
export type ModelAggregate = {
|
|
39
|
+
model: string;
|
|
40
|
+
vendor: ModelVendor;
|
|
41
|
+
runs: number;
|
|
42
|
+
decode: number;
|
|
43
|
+
ttft: number;
|
|
44
|
+
totalMs: number;
|
|
45
|
+
measured: number;
|
|
46
|
+
};
|
|
47
|
+
export declare const DEFAULT_HISTORY_KEY = "browserai:v1:history";
|
|
48
|
+
export declare const DEFAULT_HISTORY_MAX_RECORDS = 200;
|
|
49
|
+
export type RunHistoryOptions = {
|
|
50
|
+
/** Persistence. Defaults to `globalThis.localStorage` when available; `null` = in-memory only. */
|
|
51
|
+
storage?: StorageLike | null;
|
|
52
|
+
key?: string;
|
|
53
|
+
maxRecords?: number;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* A persisted, capped run log (newest first). All storage errors are swallowed: quota failures and
|
|
57
|
+
* unavailable storage degrade to in-memory history rather than breaking generation flows.
|
|
58
|
+
*/
|
|
59
|
+
export declare class RunHistoryStore {
|
|
60
|
+
#private;
|
|
61
|
+
constructor(options?: RunHistoryOptions);
|
|
62
|
+
/** The in-memory records, newest first. */
|
|
63
|
+
get records(): readonly RunRecord[];
|
|
64
|
+
/** Prepend a record and persist. Returns the updated list. */
|
|
65
|
+
append(record: RunRecord): readonly RunRecord[];
|
|
66
|
+
/** Overwrite the history (e.g. after deleting selected rows). */
|
|
67
|
+
replace(records: RunRecord[]): void;
|
|
68
|
+
clear(): void;
|
|
69
|
+
aggregateByModel(caseFilter?: string | "all"): ModelAggregate[];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Derive a vendor bucket from a preset. Uses explicit id/name matching rather than the repo owner
|
|
73
|
+
* so re-hosted artifacts (e.g. onnx-community mirrors) still map to the true model vendor.
|
|
74
|
+
*/
|
|
75
|
+
export declare function vendorForModel(preset: ModelPreset): ModelVendor;
|
|
76
|
+
export declare const VENDOR_LABELS: Record<ModelVendor, string>;
|
|
77
|
+
/**
|
|
78
|
+
* Group runs by model (optionally filtered by case) and average the per-run metrics.
|
|
79
|
+
*/
|
|
80
|
+
export declare function aggregateByModel(history: readonly RunRecord[], caseFilter: string | "all"): ModelAggregate[];
|
|
81
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;GAGG;AAEH,6EAA6E;AAC7E,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhG,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,KAAK,GACL,WAAW,GACX,QAAQ,GACR,QAAQ,GACR,aAAa,GACb,SAAS,GACT,OAAO,CAAC;AAEZ;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,MAAM,EAAE,WAAW,CAAC;IACpB,gCAAgC;IAChC,OAAO,EAAE,QAAQ,GAAG,iBAAiB,CAAC;IACtC,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,mBAAmB,yBAAyB,CAAC;AAC1D,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAgB/C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,kGAAkG;IAClG,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAuCF;;;GAGG;AACH,qBAAa,eAAe;;gBAMd,OAAO,GAAE,iBAAsB;IAO3C,2CAA2C;IAC3C,IAAI,OAAO,IAAI,SAAS,SAAS,EAAE,CAElC;IAED,8DAA8D;IAC9D,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,SAAS,EAAE;IAM/C,iEAAiE;IACjE,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI;IAKnC,KAAK,IAAI,IAAI;IASb,gBAAgB,CAAC,UAAU,GAAE,MAAM,GAAG,KAAa,GAAG,cAAc,EAAE;CAyBvE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAe/D;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAYrD,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,cAAc,EAAE,CAuB5G"}
|
package/dist/history.js
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
export const DEFAULT_HISTORY_KEY = "browserai:v1:history";
|
|
2
|
+
export const DEFAULT_HISTORY_MAX_RECORDS = 200;
|
|
3
|
+
const VALID_VENDORS = new Set([
|
|
4
|
+
"qwen",
|
|
5
|
+
"google",
|
|
6
|
+
"meta",
|
|
7
|
+
"openai",
|
|
8
|
+
"ibm",
|
|
9
|
+
"microsoft",
|
|
10
|
+
"nvidia",
|
|
11
|
+
"liquid",
|
|
12
|
+
"huggingface",
|
|
13
|
+
"mistral",
|
|
14
|
+
"other",
|
|
15
|
+
]);
|
|
16
|
+
function defaultStorage() {
|
|
17
|
+
try {
|
|
18
|
+
// `localStorage` can throw in private-mode / sandboxed contexts; history becomes ephemeral.
|
|
19
|
+
return globalThis.localStorage ?? null;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function isFiniteNumber(value) {
|
|
26
|
+
return typeof value === "number" && Number.isFinite(value);
|
|
27
|
+
}
|
|
28
|
+
function coerceRecord(value) {
|
|
29
|
+
if (!value || typeof value !== "object")
|
|
30
|
+
return null;
|
|
31
|
+
const record = value;
|
|
32
|
+
const numericKeys = ["ts", "promptTokens", "completionTokens", "decode", "ttft", "totalMs", "measured"];
|
|
33
|
+
for (const key of numericKeys) {
|
|
34
|
+
if (!isFiniteNumber(record[key]))
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
if (typeof record.model !== "string" || typeof record.case !== "string" || record.case.length === 0)
|
|
38
|
+
return null;
|
|
39
|
+
return {
|
|
40
|
+
ts: record.ts,
|
|
41
|
+
model: record.model,
|
|
42
|
+
vendor: VALID_VENDORS.has(record.vendor) ? record.vendor : "other",
|
|
43
|
+
backend: record.backend === "transformers-js" ? "transformers-js" : "webllm",
|
|
44
|
+
case: record.case,
|
|
45
|
+
promptTokens: record.promptTokens,
|
|
46
|
+
completionTokens: record.completionTokens,
|
|
47
|
+
decode: record.decode,
|
|
48
|
+
ttft: record.ttft,
|
|
49
|
+
totalMs: record.totalMs,
|
|
50
|
+
measured: record.measured,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A persisted, capped run log (newest first). All storage errors are swallowed: quota failures and
|
|
55
|
+
* unavailable storage degrade to in-memory history rather than breaking generation flows.
|
|
56
|
+
*/
|
|
57
|
+
export class RunHistoryStore {
|
|
58
|
+
#storage;
|
|
59
|
+
#key;
|
|
60
|
+
#maxRecords;
|
|
61
|
+
#records;
|
|
62
|
+
constructor(options = {}) {
|
|
63
|
+
this.#storage = options.storage === undefined ? defaultStorage() : options.storage;
|
|
64
|
+
this.#key = options.key ?? DEFAULT_HISTORY_KEY;
|
|
65
|
+
this.#maxRecords = options.maxRecords ?? DEFAULT_HISTORY_MAX_RECORDS;
|
|
66
|
+
this.#records = this.#load();
|
|
67
|
+
}
|
|
68
|
+
/** The in-memory records, newest first. */
|
|
69
|
+
get records() {
|
|
70
|
+
return this.#records;
|
|
71
|
+
}
|
|
72
|
+
/** Prepend a record and persist. Returns the updated list. */
|
|
73
|
+
append(record) {
|
|
74
|
+
this.#records = [record, ...this.#records].slice(0, this.#maxRecords);
|
|
75
|
+
this.#persist(this.#records);
|
|
76
|
+
return this.#records;
|
|
77
|
+
}
|
|
78
|
+
/** Overwrite the history (e.g. after deleting selected rows). */
|
|
79
|
+
replace(records) {
|
|
80
|
+
this.#records = records.slice(0, this.#maxRecords);
|
|
81
|
+
this.#persist(this.#records);
|
|
82
|
+
}
|
|
83
|
+
clear() {
|
|
84
|
+
this.#records = [];
|
|
85
|
+
try {
|
|
86
|
+
this.#storage?.removeItem(this.#key);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// Clearing is best-effort.
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
aggregateByModel(caseFilter = "all") {
|
|
93
|
+
return aggregateByModel(this.#records, caseFilter);
|
|
94
|
+
}
|
|
95
|
+
#load() {
|
|
96
|
+
if (!this.#storage)
|
|
97
|
+
return [];
|
|
98
|
+
try {
|
|
99
|
+
const raw = this.#storage.getItem(this.#key);
|
|
100
|
+
if (!raw)
|
|
101
|
+
return [];
|
|
102
|
+
const parsed = JSON.parse(raw);
|
|
103
|
+
if (!Array.isArray(parsed))
|
|
104
|
+
return [];
|
|
105
|
+
return parsed.map(coerceRecord).filter((record) => record !== null);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return [];
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
#persist(records) {
|
|
112
|
+
if (!this.#storage)
|
|
113
|
+
return;
|
|
114
|
+
try {
|
|
115
|
+
this.#storage.setItem(this.#key, JSON.stringify(records));
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// Quota errors are non-fatal; the list still lives in memory for this session.
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Derive a vendor bucket from a preset. Uses explicit id/name matching rather than the repo owner
|
|
124
|
+
* so re-hosted artifacts (e.g. onnx-community mirrors) still map to the true model vendor.
|
|
125
|
+
*/
|
|
126
|
+
export function vendorForModel(preset) {
|
|
127
|
+
const haystack = `${preset.id} ${preset.shortName}`.toLowerCase();
|
|
128
|
+
if (haystack.includes("qwen"))
|
|
129
|
+
return "qwen";
|
|
130
|
+
if (haystack.includes("gemma"))
|
|
131
|
+
return "google";
|
|
132
|
+
if (haystack.includes("llama") || haystack.includes("hermes"))
|
|
133
|
+
return "meta";
|
|
134
|
+
if (haystack.includes("whisper"))
|
|
135
|
+
return "openai";
|
|
136
|
+
if (haystack.includes("granite"))
|
|
137
|
+
return "ibm";
|
|
138
|
+
if (haystack.includes("phi"))
|
|
139
|
+
return "microsoft";
|
|
140
|
+
if (haystack.includes("nemotron") || haystack.includes("parakeet"))
|
|
141
|
+
return "nvidia";
|
|
142
|
+
if (haystack.includes("lfm") || haystack.includes("liquid"))
|
|
143
|
+
return "liquid";
|
|
144
|
+
if (haystack.includes("smollm") || haystack.includes("smolvlm"))
|
|
145
|
+
return "huggingface";
|
|
146
|
+
if (haystack.includes("mistral") || haystack.includes("ministral") || haystack.includes("voxtral"))
|
|
147
|
+
return "mistral";
|
|
148
|
+
if (haystack.includes("olmo"))
|
|
149
|
+
return "other";
|
|
150
|
+
if (haystack.includes("minicpm"))
|
|
151
|
+
return "other";
|
|
152
|
+
return "other";
|
|
153
|
+
}
|
|
154
|
+
export const VENDOR_LABELS = {
|
|
155
|
+
qwen: "Qwen",
|
|
156
|
+
google: "Google",
|
|
157
|
+
meta: "Meta",
|
|
158
|
+
openai: "OpenAI",
|
|
159
|
+
ibm: "IBM",
|
|
160
|
+
microsoft: "Microsoft",
|
|
161
|
+
nvidia: "NVIDIA",
|
|
162
|
+
liquid: "Liquid",
|
|
163
|
+
huggingface: "HuggingFace",
|
|
164
|
+
mistral: "Mistral",
|
|
165
|
+
other: "Other",
|
|
166
|
+
};
|
|
167
|
+
/**
|
|
168
|
+
* Group runs by model (optionally filtered by case) and average the per-run metrics.
|
|
169
|
+
*/
|
|
170
|
+
export function aggregateByModel(history, caseFilter) {
|
|
171
|
+
const buckets = new Map();
|
|
172
|
+
for (const record of history) {
|
|
173
|
+
if (caseFilter !== "all" && record.case !== caseFilter)
|
|
174
|
+
continue;
|
|
175
|
+
const bucket = buckets.get(record.model) ?? { vendor: record.vendor, runs: 0, decode: 0, ttft: 0, totalMs: 0, measured: 0 };
|
|
176
|
+
bucket.runs += 1;
|
|
177
|
+
bucket.decode += record.decode;
|
|
178
|
+
bucket.ttft += record.ttft;
|
|
179
|
+
bucket.totalMs += record.totalMs;
|
|
180
|
+
bucket.measured += record.measured;
|
|
181
|
+
buckets.set(record.model, bucket);
|
|
182
|
+
}
|
|
183
|
+
return Array.from(buckets.entries()).map(([model, bucket]) => ({
|
|
184
|
+
model,
|
|
185
|
+
vendor: bucket.vendor,
|
|
186
|
+
runs: bucket.runs,
|
|
187
|
+
decode: bucket.decode / bucket.runs,
|
|
188
|
+
ttft: bucket.ttft / bucket.runs,
|
|
189
|
+
totalMs: bucket.totalMs / bucket.runs,
|
|
190
|
+
measured: bucket.measured / bucket.runs,
|
|
191
|
+
}));
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @missionsquad/browserai — run small open AI models entirely in the browser with WebGPU.
|
|
3
|
+
*
|
|
4
|
+
* Core entry points:
|
|
5
|
+
* - {@link BrowserAI} — model catalog + capability-slot manager + inference façade.
|
|
6
|
+
* - {@link VoicePipeline} — headless press-to-talk voice assistant (mic → STT → LLM → TTS).
|
|
7
|
+
*/
|
|
8
|
+
export { BrowserAI, buildModelCacheTarget, normalizeContextLength } from "./client.js";
|
|
9
|
+
export type { BrowserAIEvents, GenerateTextOptions, LoadOptions, LoadProgress, LoadedModel, StreamingTtsSession, TtsOverrides } from "./client.js";
|
|
10
|
+
export { DEFAULT_CONTEXT_LENGTH, resolveConfig } from "./config.js";
|
|
11
|
+
export type { BrowserAIConfig, HistoryOptions, KokoroOptions, ResolvedConfig, StorageLike, TtsDefaults, WebLLMOptions } from "./config.js";
|
|
12
|
+
export { BrowserAIError, formatError, MicrophoneError, MissingModelError, ModelLoadError, ProxyVerificationError, UnknownModelError, VoiceTurnError, WebGPUUnavailableError, } from "./errors.js";
|
|
13
|
+
export { TypedEmitter } from "./events.js";
|
|
14
|
+
export type { EventMap, Listener } from "./events.js";
|
|
15
|
+
export { applyCuratedModelRecordOverrides, CUSTOM_MODEL_RECORD_IDS, CUSTOM_MODEL_RECORDS, formatMB, getModelPreset, KOKORO_MODEL_ID, KOKORO_VOICES, MODALITY_ICONS, MODALITY_LABELS, MODEL_PRESETS, MODEL_RECORD_OVERRIDES, modelRepoLabel, modelSlots, presetModalityIn, presetModalityOut, presetTasks, SLOT_ORDER, SUPERTONIC_2_MODEL_ID, SUPERTONIC_MODEL_ID, SUPERTONIC_VOICES, TASK_ICONS, TASK_LABELS, ttsVoicesForModel, } from "./models.js";
|
|
16
|
+
export type { Modality, ModelBackend, ModelPreset, ModelTask, MultimodalRuntime, RuntimePreset, TtsVoice } from "./models.js";
|
|
17
|
+
export { buildResponseFormat, clampNumber, parseOptionalInteger, runtimeParamsFromPreset } from "./generation.js";
|
|
18
|
+
export type { JsonMode, RuntimeParameters } from "./generation.js";
|
|
19
|
+
export { buildRuntimeStatsText, collectGenericStats, EMPTY_RESPONSE, generate, normalizeLatencyBreakdown } from "./inference.js";
|
|
20
|
+
export type { ChatMessage, EngineHandles, GenerateOptions, GenerationResult, LatencyBreakdown, RuntimeStats, TransformersModule, TransformersTextGenerationPipeline, TransformersTokenizer, WebLLMUsageExtra, } from "./inference.js";
|
|
21
|
+
export { capSrc, DEFAULT_KOKORO_CDN, describeImage, disposeMultimodal, generateGemmaText, loadMultimodal, planGemmaAudioWindows, runAudioLm, runGemma, runVoxtralRealtime, supertonicVoiceUrl, supportsStreamingTts, synthesize, synthesizeStream, transcribe, } from "./multimodal.js";
|
|
22
|
+
export type { AudioWindow, GenStats, KokoroModule, LoadMultimodalOptions, MultimodalDevice, MultimodalHandle, MultimodalTransformers, ProgressCallback, RawAudio, SttResult, TextTurn, TtsTextSplitter, VlmResult, } from "./multimodal.js";
|
|
23
|
+
export { detectLikelyRepetition, extractJsonCandidate, normalizeModelText, parseJsonFromModel, prettyJson } from "./json.js";
|
|
24
|
+
export type { JsonParseResult } from "./json.js";
|
|
25
|
+
export { validateAgainstJsonSchema } from "./schema-validator.js";
|
|
26
|
+
export { DEFAULT_EXTRACTION_SCHEMA, stringifySchema, stripSchemaMetadata } from "./schema.js";
|
|
27
|
+
export { buildExtractionMessages, DEFAULT_EXTRACTION_INSTRUCTIONS } from "./prompt.js";
|
|
28
|
+
export { applyContextOverride, buildProxiedAppConfig, buildWebLLMAppConfig, modelSourceDescription, proxyHuggingFaceUrl, proxyModelLibraryUrl, proxyModelRecord, proxyRawGithubUrl, TRANSFORMERS_CACHE_KEY, withCustomModelRecords, } from "./model-source.js";
|
|
29
|
+
export type { BrowserCacheBackend, ModelSourceMode } from "./model-source.js";
|
|
30
|
+
export { splitHuggingFaceRepoId, verifyTransformersProxy, verifyWebLLMProxy } from "./proxy-verify.js";
|
|
31
|
+
export { collectHardwareSnapshot, formatBytes, formatHardwareSnapshot, modelSafetyHint } from "./hardware.js";
|
|
32
|
+
export type { HardwareSnapshot } from "./hardware.js";
|
|
33
|
+
export { deleteOneModelArtifactsFromBrowserStorage, deleteTransformersModelArtifactsFromBrowserStorage, deleteTransformersModelFromBrowserCache, deleteWebLLMModelArtifactsFromBrowserStorage, estimateOriginStorage, getCachedModelStatus, hasTransformersModelInBrowserCache, matchesModelCacheTarget, TRANSFORMERS_CACHE_SCOPE, WEBLLM_CACHE_SCOPES, } from "./model-cache.js";
|
|
34
|
+
export type { CacheCleanupResult, CacheCleanupScopeResult, CachedModelStatus, IndividualModelCacheStatus, IndividualModelCleanupResult, ModelCacheTarget, StorageEstimateSnapshot, } from "./model-cache.js";
|
|
35
|
+
export { buildMultimodalStats, runRecordFromStats, wordCountGenStats } from "./metrics.js";
|
|
36
|
+
export { aggregateByModel, DEFAULT_HISTORY_KEY, DEFAULT_HISTORY_MAX_RECORDS, RunHistoryStore, VENDOR_LABELS, vendorForModel, } from "./history.js";
|
|
37
|
+
export type { ModelAggregate, ModelVendor, RunCaseKey, RunHistoryOptions, RunRecord } from "./history.js";
|
|
38
|
+
export { AUDIO_SR, encodeWavBlob, pitchShiftBuffer } from "./audio/pcm.js";
|
|
39
|
+
export { decodeAudioTo16kMono } from "./audio/decode.js";
|
|
40
|
+
export { MicRecorder } from "./audio/recorder.js";
|
|
41
|
+
export type { MicRecorderOptions } from "./audio/recorder.js";
|
|
42
|
+
export { createStreamingAudioPlayer } from "./audio/streaming-player.js";
|
|
43
|
+
export type { StreamingAudioPlayer, StreamingAudioPlayerOptions } from "./audio/streaming-player.js";
|
|
44
|
+
export { clipFromRawAudio, clipPlaybackRate, playClipThroughElement, releaseClip, repitchClip, synthesizeClip } from "./audio/clip.js";
|
|
45
|
+
export type { SynthClip, SynthesizeClipOptions } from "./audio/clip.js";
|
|
46
|
+
export { stripThinkTags } from "./text-utils.js";
|
|
47
|
+
export { capPipelineHistory, missingPipelineModels, PIPELINE_HISTORY_MAX_TURNS, PIPELINE_RECOMMENDED, PIPELINE_SYSTEM_PROMPT, PIPELINE_TASKS, shouldSpeakReply, streamedDelta, } from "./voice/helpers.js";
|
|
48
|
+
export type { PipelineTask } from "./voice/helpers.js";
|
|
49
|
+
export { VoicePipeline } from "./voice/voice-pipeline.js";
|
|
50
|
+
export type { TurnDiscardReason, VoicePipelineEvents, VoicePipelineOptions, VoicePipelineStage } from "./voice/voice-pipeline.js";
|
|
51
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @missionsquad/browserai — run small open AI models entirely in the browser with WebGPU.
|
|
3
|
+
*
|
|
4
|
+
* Core entry points:
|
|
5
|
+
* - {@link BrowserAI} — model catalog + capability-slot manager + inference façade.
|
|
6
|
+
* - {@link VoicePipeline} — headless press-to-talk voice assistant (mic → STT → LLM → TTS).
|
|
7
|
+
*/
|
|
8
|
+
// Client
|
|
9
|
+
export { BrowserAI, buildModelCacheTarget, normalizeContextLength } from "./client.js";
|
|
10
|
+
// Configuration
|
|
11
|
+
export { DEFAULT_CONTEXT_LENGTH, resolveConfig } from "./config.js";
|
|
12
|
+
// Errors
|
|
13
|
+
export { BrowserAIError, formatError, MicrophoneError, MissingModelError, ModelLoadError, ProxyVerificationError, UnknownModelError, VoiceTurnError, WebGPUUnavailableError, } from "./errors.js";
|
|
14
|
+
// Events
|
|
15
|
+
export { TypedEmitter } from "./events.js";
|
|
16
|
+
// Model catalog
|
|
17
|
+
export { applyCuratedModelRecordOverrides, CUSTOM_MODEL_RECORD_IDS, CUSTOM_MODEL_RECORDS, formatMB, getModelPreset, KOKORO_MODEL_ID, KOKORO_VOICES, MODALITY_ICONS, MODALITY_LABELS, MODEL_PRESETS, MODEL_RECORD_OVERRIDES, modelRepoLabel, modelSlots, presetModalityIn, presetModalityOut, presetTasks, SLOT_ORDER, SUPERTONIC_2_MODEL_ID, SUPERTONIC_MODEL_ID, SUPERTONIC_VOICES, TASK_ICONS, TASK_LABELS, ttsVoicesForModel, } from "./models.js";
|
|
18
|
+
// Generation parameters + JSON mode
|
|
19
|
+
export { buildResponseFormat, clampNumber, parseOptionalInteger, runtimeParamsFromPreset } from "./generation.js";
|
|
20
|
+
// Text inference
|
|
21
|
+
export { buildRuntimeStatsText, collectGenericStats, EMPTY_RESPONSE, generate, normalizeLatencyBreakdown } from "./inference.js";
|
|
22
|
+
// Multimodal runtimes (STT / TTS / VLM / Gemma)
|
|
23
|
+
export { capSrc, DEFAULT_KOKORO_CDN, describeImage, disposeMultimodal, generateGemmaText, loadMultimodal, planGemmaAudioWindows, runAudioLm, runGemma, runVoxtralRealtime, supertonicVoiceUrl, supportsStreamingTts, synthesize, synthesizeStream, transcribe, } from "./multimodal.js";
|
|
24
|
+
// JSON helpers + schema validation
|
|
25
|
+
export { detectLikelyRepetition, extractJsonCandidate, normalizeModelText, parseJsonFromModel, prettyJson } from "./json.js";
|
|
26
|
+
export { validateAgainstJsonSchema } from "./schema-validator.js";
|
|
27
|
+
export { DEFAULT_EXTRACTION_SCHEMA, stringifySchema, stripSchemaMetadata } from "./schema.js";
|
|
28
|
+
export { buildExtractionMessages, DEFAULT_EXTRACTION_INSTRUCTIONS } from "./prompt.js";
|
|
29
|
+
// Model source (direct vs proxy) + proxy verification
|
|
30
|
+
export { applyContextOverride, buildProxiedAppConfig, buildWebLLMAppConfig, modelSourceDescription, proxyHuggingFaceUrl, proxyModelLibraryUrl, proxyModelRecord, proxyRawGithubUrl, TRANSFORMERS_CACHE_KEY, withCustomModelRecords, } from "./model-source.js";
|
|
31
|
+
export { splitHuggingFaceRepoId, verifyTransformersProxy, verifyWebLLMProxy } from "./proxy-verify.js";
|
|
32
|
+
// Hardware probing
|
|
33
|
+
export { collectHardwareSnapshot, formatBytes, formatHardwareSnapshot, modelSafetyHint } from "./hardware.js";
|
|
34
|
+
// Model artifact cache management
|
|
35
|
+
export { deleteOneModelArtifactsFromBrowserStorage, deleteTransformersModelArtifactsFromBrowserStorage, deleteTransformersModelFromBrowserCache, deleteWebLLMModelArtifactsFromBrowserStorage, estimateOriginStorage, getCachedModelStatus, hasTransformersModelInBrowserCache, matchesModelCacheTarget, TRANSFORMERS_CACHE_SCOPE, WEBLLM_CACHE_SCOPES, } from "./model-cache.js";
|
|
36
|
+
// Metrics + run history
|
|
37
|
+
export { buildMultimodalStats, runRecordFromStats, wordCountGenStats } from "./metrics.js";
|
|
38
|
+
export { aggregateByModel, DEFAULT_HISTORY_KEY, DEFAULT_HISTORY_MAX_RECORDS, RunHistoryStore, VENDOR_LABELS, vendorForModel, } from "./history.js";
|
|
39
|
+
// Audio utilities
|
|
40
|
+
export { AUDIO_SR, encodeWavBlob, pitchShiftBuffer } from "./audio/pcm.js";
|
|
41
|
+
export { decodeAudioTo16kMono } from "./audio/decode.js";
|
|
42
|
+
export { MicRecorder } from "./audio/recorder.js";
|
|
43
|
+
export { createStreamingAudioPlayer } from "./audio/streaming-player.js";
|
|
44
|
+
export { clipFromRawAudio, clipPlaybackRate, playClipThroughElement, releaseClip, repitchClip, synthesizeClip } from "./audio/clip.js";
|
|
45
|
+
// Text utilities
|
|
46
|
+
export { stripThinkTags } from "./text-utils.js";
|
|
47
|
+
// Voice pipeline
|
|
48
|
+
export { capPipelineHistory, missingPipelineModels, PIPELINE_HISTORY_MAX_TURNS, PIPELINE_RECOMMENDED, PIPELINE_SYSTEM_PROMPT, PIPELINE_TASKS, shouldSpeakReply, streamedDelta, } from "./voice/helpers.js";
|
|
49
|
+
export { VoicePipeline } from "./voice/voice-pipeline.js";
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,SAAS;AACT,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGvF,gBAAgB;AAChB,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGpE,SAAS;AACT,OAAO,EACL,cAAc,EACd,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAErB,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,gBAAgB;AAChB,OAAO,EACL,gCAAgC,EAChC,uBAAuB,EACvB,oBAAoB,EACpB,QAAQ,EACR,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,EACf,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAGrB,oCAAoC;AACpC,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAGlH,iBAAiB;AACjB,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,cAAc,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAcjI,gDAAgD;AAChD,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,UAAU,EACV,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,UAAU,GACX,MAAM,iBAAiB,CAAC;AAiBzB,mCAAmC;AACnC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE7H,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,EAAE,uBAAuB,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AAEvF,sDAAsD;AACtD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEvG,mBAAmB;AACnB,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAG9G,kCAAkC;AAClC,OAAO,EACL,yCAAyC,EACzC,kDAAkD,EAClD,uCAAuC,EACvC,4CAA4C,EAC5C,qBAAqB,EACrB,oBAAoB,EACpB,kCAAkC,EAClC,uBAAuB,EACvB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAW1B,wBAAwB;AACxB,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,2BAA2B,EAC3B,eAAe,EACf,aAAa,EACb,cAAc,GACf,MAAM,cAAc,CAAC;AAGtB,kBAAkB;AAClB,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAEzE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGvI,iBAAiB;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,iBAAiB;AACjB,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,aAAa,GACd,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { MLCEngineInterface } from "@mlc-ai/web-llm";
|
|
2
|
+
import type { ModelBackend, ModelPreset } from "./models.js";
|
|
3
|
+
import type { RuntimeParameters } from "./generation.js";
|
|
4
|
+
export type ChatMessage = {
|
|
5
|
+
role: "system" | "user" | "assistant";
|
|
6
|
+
content: string;
|
|
7
|
+
};
|
|
8
|
+
export type LatencyBreakdown = Record<string, number[]>;
|
|
9
|
+
export type WebLLMUsageExtra = {
|
|
10
|
+
e2e_latency_s?: number;
|
|
11
|
+
prefill_tokens_per_s?: number;
|
|
12
|
+
decode_tokens_per_s?: number;
|
|
13
|
+
time_to_first_token_s?: number;
|
|
14
|
+
time_per_output_token_s?: number;
|
|
15
|
+
grammar_init_s?: number;
|
|
16
|
+
grammar_per_token_s?: number;
|
|
17
|
+
latencyBreakdown?: LatencyBreakdown;
|
|
18
|
+
token_count_source?: string;
|
|
19
|
+
[key: string]: unknown;
|
|
20
|
+
};
|
|
21
|
+
export type RuntimeStats = {
|
|
22
|
+
rawText: string;
|
|
23
|
+
model: string;
|
|
24
|
+
backend: ModelBackend | "unknown";
|
|
25
|
+
finishReason: string;
|
|
26
|
+
measuredElapsedMs: number;
|
|
27
|
+
promptTokens?: number;
|
|
28
|
+
completionTokens?: number;
|
|
29
|
+
totalTokens?: number;
|
|
30
|
+
measuredCompletionTokensPerSecond?: number;
|
|
31
|
+
extra?: WebLLMUsageExtra;
|
|
32
|
+
latencyBreakdown?: LatencyBreakdown;
|
|
33
|
+
legacyStats?: string;
|
|
34
|
+
error?: string;
|
|
35
|
+
};
|
|
36
|
+
export type TransformersTokenizer = {
|
|
37
|
+
apply_chat_template?: (messages: unknown, options?: Record<string, unknown>) => unknown;
|
|
38
|
+
encode?: (text: string, options?: Record<string, unknown>) => unknown;
|
|
39
|
+
decode?: (tokens: unknown, options?: Record<string, unknown>) => string;
|
|
40
|
+
batch_decode?: (tokens: unknown, options?: Record<string, unknown>) => string[];
|
|
41
|
+
all_special_ids?: unknown[];
|
|
42
|
+
(input: unknown, options?: Record<string, unknown>): unknown;
|
|
43
|
+
};
|
|
44
|
+
export type TransformersTextGenerationPipeline = ((input: unknown, options?: Record<string, unknown>) => Promise<unknown>) & {
|
|
45
|
+
tokenizer?: TransformersTokenizer;
|
|
46
|
+
model?: {
|
|
47
|
+
dispose?: () => unknown;
|
|
48
|
+
};
|
|
49
|
+
dispose?: () => unknown;
|
|
50
|
+
};
|
|
51
|
+
export type TransformersModule = {
|
|
52
|
+
env?: Record<string, unknown>;
|
|
53
|
+
pipeline: (task: string, model: string, options?: Record<string, unknown>) => Promise<TransformersTextGenerationPipeline>;
|
|
54
|
+
TextStreamer?: new (tokenizer: TransformersTokenizer, options?: Record<string, unknown>) => unknown;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Live engine references owned by the client and passed into the stateless generation helpers.
|
|
58
|
+
*/
|
|
59
|
+
export type EngineHandles = {
|
|
60
|
+
engine: MLCEngineInterface | null;
|
|
61
|
+
transformersGenerator: TransformersTextGenerationPipeline | null;
|
|
62
|
+
transformersTokenizer: TransformersTokenizer | null;
|
|
63
|
+
transformersModule: TransformersModule | null;
|
|
64
|
+
backend: ModelBackend | null;
|
|
65
|
+
modelId: string | null;
|
|
66
|
+
};
|
|
67
|
+
export type GenerationResult = {
|
|
68
|
+
text: string;
|
|
69
|
+
stats: RuntimeStats;
|
|
70
|
+
};
|
|
71
|
+
export type GenerateOptions = {
|
|
72
|
+
/** Structured cases pass a schema + json mode for WebLLM constrained decoding. */
|
|
73
|
+
schema?: unknown;
|
|
74
|
+
/** Stream tokens to this callback (receives the full accumulated text so far). */
|
|
75
|
+
onDelta?: (fullText: string) => void;
|
|
76
|
+
/** Reset the WebLLM KV cache before generating. Default true (stateless). Set false for multi-turn chat that relies on passed history — history is still passed explicitly, so reset stays safe. */
|
|
77
|
+
resetChat?: boolean;
|
|
78
|
+
};
|
|
79
|
+
/** Sentinel substituted for blank model output; exported so callers can detect/skip it (e.g. TTS). */
|
|
80
|
+
export declare const EMPTY_RESPONSE = "[empty response]";
|
|
81
|
+
/**
|
|
82
|
+
* Run one generation against whichever backend is loaded and return the text plus normalized stats.
|
|
83
|
+
* Dispatches to WebLLM (streaming or blocking) or Transformers.js. Throws if no engine is loaded.
|
|
84
|
+
*/
|
|
85
|
+
export declare function generate(handles: EngineHandles, messages: ChatMessage[], runtime: RuntimeParameters, preset: ModelPreset, options?: GenerateOptions): Promise<GenerationResult>;
|
|
86
|
+
export declare function collectGenericStats(model: string, backend: ModelBackend | "unknown", started: number, ended: number, error?: string): RuntimeStats;
|
|
87
|
+
export declare function buildRuntimeStatsText(stats: RuntimeStats): string;
|
|
88
|
+
export declare function normalizeLatencyBreakdown(value: unknown): LatencyBreakdown | undefined;
|
|
89
|
+
//# sourceMappingURL=inference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inference.d.ts","sourceRoot":"","sources":["../src/inference.ts"],"names":[],"mappings":"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"}
|