@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.
Files changed (146) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +229 -0
  3. package/dist/audio/clip.d.ts +51 -0
  4. package/dist/audio/clip.d.ts.map +1 -0
  5. package/dist/audio/clip.js +71 -0
  6. package/dist/audio/clip.js.map +1 -0
  7. package/dist/audio/decode.d.ts +7 -0
  8. package/dist/audio/decode.d.ts.map +1 -0
  9. package/dist/audio/decode.js +19 -0
  10. package/dist/audio/decode.js.map +1 -0
  11. package/dist/audio/pcm.d.ts +13 -0
  12. package/dist/audio/pcm.d.ts.map +1 -0
  13. package/dist/audio/pcm.js +66 -0
  14. package/dist/audio/pcm.js.map +1 -0
  15. package/dist/audio/recorder.d.ts +40 -0
  16. package/dist/audio/recorder.d.ts.map +1 -0
  17. package/dist/audio/recorder.js +127 -0
  18. package/dist/audio/recorder.js.map +1 -0
  19. package/dist/audio/streaming-player.d.ts +29 -0
  20. package/dist/audio/streaming-player.d.ts.map +1 -0
  21. package/dist/audio/streaming-player.js +82 -0
  22. package/dist/audio/streaming-player.js.map +1 -0
  23. package/dist/client.d.ts +195 -0
  24. package/dist/client.d.ts.map +1 -0
  25. package/dist/client.js +638 -0
  26. package/dist/client.js.map +1 -0
  27. package/dist/config.d.ts +81 -0
  28. package/dist/config.d.ts.map +1 -0
  29. package/dist/config.js +19 -0
  30. package/dist/config.js.map +1 -0
  31. package/dist/errors.d.ts +52 -0
  32. package/dist/errors.d.ts.map +1 -0
  33. package/dist/errors.js +74 -0
  34. package/dist/errors.js.map +1 -0
  35. package/dist/events.d.ts +18 -0
  36. package/dist/events.d.ts.map +1 -0
  37. package/dist/events.js +43 -0
  38. package/dist/events.js.map +1 -0
  39. package/dist/generation.d.ts +12 -0
  40. package/dist/generation.d.ts.map +1 -0
  41. package/dist/generation.js +30 -0
  42. package/dist/generation.js.map +1 -0
  43. package/dist/hardware.d.ts +23 -0
  44. package/dist/hardware.d.ts.map +1 -0
  45. package/dist/hardware.js +150 -0
  46. package/dist/hardware.js.map +1 -0
  47. package/dist/history.d.ts +81 -0
  48. package/dist/history.d.ts.map +1 -0
  49. package/dist/history.js +193 -0
  50. package/dist/history.js.map +1 -0
  51. package/dist/index.d.ts +51 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +50 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/inference.d.ts +89 -0
  56. package/dist/inference.d.ts.map +1 -0
  57. package/dist/inference.js +411 -0
  58. package/dist/inference.js.map +1 -0
  59. package/dist/json.d.ts +22 -0
  60. package/dist/json.d.ts.map +1 -0
  61. package/dist/json.js +145 -0
  62. package/dist/json.js.map +1 -0
  63. package/dist/metrics.d.ts +18 -0
  64. package/dist/metrics.d.ts.map +1 -0
  65. package/dist/metrics.js +59 -0
  66. package/dist/metrics.js.map +1 -0
  67. package/dist/model-cache.d.ts +49 -0
  68. package/dist/model-cache.d.ts.map +1 -0
  69. package/dist/model-cache.js +511 -0
  70. package/dist/model-cache.js.map +1 -0
  71. package/dist/model-source.d.ts +27 -0
  72. package/dist/model-source.d.ts.map +1 -0
  73. package/dist/model-source.js +110 -0
  74. package/dist/model-source.js.map +1 -0
  75. package/dist/models.d.ts +103 -0
  76. package/dist/models.d.ts.map +1 -0
  77. package/dist/models.js +1052 -0
  78. package/dist/models.js.map +1 -0
  79. package/dist/multimodal.d.ts +261 -0
  80. package/dist/multimodal.d.ts.map +1 -0
  81. package/dist/multimodal.js +506 -0
  82. package/dist/multimodal.js.map +1 -0
  83. package/dist/prompt.d.ts +13 -0
  84. package/dist/prompt.d.ts.map +1 -0
  85. package/dist/prompt.js +32 -0
  86. package/dist/prompt.js.map +1 -0
  87. package/dist/proxy-verify.d.ts +10 -0
  88. package/dist/proxy-verify.d.ts.map +1 -0
  89. package/dist/proxy-verify.js +98 -0
  90. package/dist/proxy-verify.js.map +1 -0
  91. package/dist/schema-validator.d.ts +6 -0
  92. package/dist/schema-validator.d.ts.map +1 -0
  93. package/dist/schema-validator.js +104 -0
  94. package/dist/schema-validator.js.map +1 -0
  95. package/dist/schema.d.ts +98 -0
  96. package/dist/schema.d.ts.map +1 -0
  97. package/dist/schema.js +115 -0
  98. package/dist/schema.js.map +1 -0
  99. package/dist/text-utils.d.ts +8 -0
  100. package/dist/text-utils.d.ts.map +1 -0
  101. package/dist/text-utils.js +14 -0
  102. package/dist/text-utils.js.map +1 -0
  103. package/dist/voice/helpers.d.ts +35 -0
  104. package/dist/voice/helpers.d.ts.map +1 -0
  105. package/dist/voice/helpers.js +49 -0
  106. package/dist/voice/helpers.js.map +1 -0
  107. package/dist/voice/voice-pipeline.d.ts +155 -0
  108. package/dist/voice/voice-pipeline.d.ts.map +1 -0
  109. package/dist/voice/voice-pipeline.js +407 -0
  110. package/dist/voice/voice-pipeline.js.map +1 -0
  111. package/dist/webllm.worker.d.ts +2 -0
  112. package/dist/webllm.worker.d.ts.map +1 -0
  113. package/dist/webllm.worker.js +8 -0
  114. package/dist/webllm.worker.js.map +1 -0
  115. package/package.json +62 -0
  116. package/src/audio/clip.ts +94 -0
  117. package/src/audio/decode.ts +19 -0
  118. package/src/audio/pcm.ts +62 -0
  119. package/src/audio/recorder.ts +146 -0
  120. package/src/audio/streaming-player.ts +99 -0
  121. package/src/client.ts +784 -0
  122. package/src/config.ts +104 -0
  123. package/src/errors.ts +81 -0
  124. package/src/events.ts +53 -0
  125. package/src/generation.ts +39 -0
  126. package/src/hardware.ts +193 -0
  127. package/src/history.ts +257 -0
  128. package/src/index.ts +203 -0
  129. package/src/inference.ts +579 -0
  130. package/src/json.ts +169 -0
  131. package/src/metrics.ts +63 -0
  132. package/src/model-cache.ts +637 -0
  133. package/src/model-source.ts +142 -0
  134. package/src/models.ts +1171 -0
  135. package/src/multimodal.ts +697 -0
  136. package/src/prompt.ts +33 -0
  137. package/src/proxy-verify.ts +113 -0
  138. package/src/schema-validator.ts +117 -0
  139. package/src/schema.ts +118 -0
  140. package/src/text-utils.ts +12 -0
  141. package/src/voice/helpers.ts +59 -0
  142. package/src/voice/voice-pipeline.ts +513 -0
  143. package/src/webllm.worker.ts +9 -0
  144. package/worker-template/README.md +39 -0
  145. package/worker-template/cloudflare-worker.ts +389 -0
  146. 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"}
@@ -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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"}
@@ -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":"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"}
@@ -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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"}