webml-kit 0.4.0 → 0.4.1

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 (62) hide show
  1. package/package.json +3 -3
  2. package/dist/cache.d.ts +0 -46
  3. package/dist/cache.d.ts.map +0 -1
  4. package/dist/cache.js +0 -161
  5. package/dist/cache.js.map +0 -1
  6. package/dist/decision.d.ts +0 -182
  7. package/dist/decision.d.ts.map +0 -1
  8. package/dist/decision.js +0 -789
  9. package/dist/decision.js.map +0 -1
  10. package/dist/device.d.ts +0 -86
  11. package/dist/device.d.ts.map +0 -1
  12. package/dist/device.js +0 -195
  13. package/dist/device.js.map +0 -1
  14. package/dist/gpu-recovery.d.ts +0 -61
  15. package/dist/gpu-recovery.d.ts.map +0 -1
  16. package/dist/gpu-recovery.js +0 -105
  17. package/dist/gpu-recovery.js.map +0 -1
  18. package/dist/hub.d.ts +0 -97
  19. package/dist/hub.d.ts.map +0 -1
  20. package/dist/hub.js +0 -142
  21. package/dist/hub.js.map +0 -1
  22. package/dist/index.d.ts +0 -63
  23. package/dist/index.d.ts.map +0 -1
  24. package/dist/index.js +0 -65
  25. package/dist/index.js.map +0 -1
  26. package/dist/inputs.d.ts +0 -27
  27. package/dist/inputs.d.ts.map +0 -1
  28. package/dist/inputs.js +0 -155
  29. package/dist/inputs.js.map +0 -1
  30. package/dist/loader.d.ts +0 -100
  31. package/dist/loader.d.ts.map +0 -1
  32. package/dist/loader.js +0 -246
  33. package/dist/loader.js.map +0 -1
  34. package/dist/model-client.d.ts +0 -149
  35. package/dist/model-client.d.ts.map +0 -1
  36. package/dist/model-client.js +0 -318
  37. package/dist/model-client.js.map +0 -1
  38. package/dist/model-worker.d.ts +0 -16
  39. package/dist/model-worker.d.ts.map +0 -1
  40. package/dist/model-worker.js +0 -340
  41. package/dist/model-worker.js.map +0 -1
  42. package/dist/onnx-pipeline.d.ts +0 -20
  43. package/dist/onnx-pipeline.d.ts.map +0 -1
  44. package/dist/onnx-pipeline.js +0 -462
  45. package/dist/onnx-pipeline.js.map +0 -1
  46. package/dist/pipelines/index.d.ts +0 -28
  47. package/dist/pipelines/index.d.ts.map +0 -1
  48. package/dist/pipelines/index.js +0 -140
  49. package/dist/pipelines/index.js.map +0 -1
  50. package/dist/shim-ort.d.ts +0 -6
  51. package/dist/shim-ort.d.ts.map +0 -1
  52. package/dist/shim-ort.js +0 -38
  53. package/dist/shim-ort.js.map +0 -1
  54. package/dist/streaming.d.ts +0 -55
  55. package/dist/streaming.d.ts.map +0 -1
  56. package/dist/streaming.js +0 -142
  57. package/dist/streaming.js.map +0 -1
  58. package/dist/types.d.ts +0 -200
  59. package/dist/types.d.ts.map +0 -1
  60. package/dist/types.js +0 -3
  61. package/dist/types.js.map +0 -1
  62. package/dist/webml-kit.browser.js +0 -2568
package/dist/loader.js DELETED
@@ -1,246 +0,0 @@
1
- /**
2
- * Functional, zero-ceremony model loader for webml-kit.
3
- *
4
- * ```ts
5
- * import webml from 'webml-kit';
6
- *
7
- * // Speech recognition
8
- * const asr = await webml('onnx-community/whisper-tiny.en');
9
- * const { text } = await asr.transcribe(audioBlob);
10
- *
11
- * // Live mic listening
12
- * const mic = await asr.listen({ onTranscript: (t) => console.log(t) });
13
- *
14
- * // Text generation
15
- * const llm = await webml('onnx-community/Llama-3.2-1B-Instruct-ONNX');
16
- * for await (const { token } of llm.stream('Tell me a joke')) {
17
- * process.stdout.write(token);
18
- * }
19
- *
20
- * // Callable invocation for any model
21
- * const classifier = await webml('Xenova/vit-base-patch16-224');
22
- * const labels = await classifier(imageFile);
23
- * ```
24
- */
25
- import { ModelClient } from './model-client.js';
26
- import { getModelInfo } from './hub.js';
27
- import { coerceAudio, listenMic } from './inputs.js';
28
- import { createDecisionEngine, directChoice, } from './decision.js';
29
- /**
30
- * Automatically infers the pipeline task from modelId, file extensions, or Hugging Face metadata.
31
- */
32
- export async function inferTask(modelId) {
33
- const lower = modelId.toLowerCase();
34
- // Fast heuristic matching
35
- if (lower.includes('openjev') ||
36
- lower.includes('jev') ||
37
- lower.includes('decision') ||
38
- lower === 'minicpm5-2b' ||
39
- lower === 'qwen3-0.6b' ||
40
- lower === 'qwen3.5-4b') {
41
- return 'decision';
42
- }
43
- if (lower.includes('kokoro') ||
44
- lower.includes('speecht5') ||
45
- lower.includes('mms-tts') ||
46
- lower.includes('tts')) {
47
- return 'text-to-speech';
48
- }
49
- if (lower.includes('whisper') ||
50
- lower.includes('asr') ||
51
- lower.includes('speech') ||
52
- lower.includes('sushrota') ||
53
- lower.includes('parakeet')) {
54
- return 'automatic-speech-recognition';
55
- }
56
- if (lower.includes('llama') ||
57
- lower.includes('qwen') ||
58
- lower.includes('gpt') ||
59
- lower.includes('mistral') ||
60
- lower.includes('phi') ||
61
- lower.includes('gemma') ||
62
- lower.includes('bonsai')) {
63
- return 'text-generation';
64
- }
65
- if (lower.includes('detr') || lower.includes('yolo')) {
66
- return 'object-detection';
67
- }
68
- if (lower.includes('vit') || lower.includes('resnet') || lower.includes('mobilenet')) {
69
- return 'image-classification';
70
- }
71
- if (lower.includes('minilm') || lower.includes('bge') || lower.includes('embed')) {
72
- return 'feature-extraction';
73
- }
74
- if (lower.endsWith('.onnx')) {
75
- return 'raw-onnx';
76
- }
77
- // Fallback to HF Hub lookup
78
- try {
79
- const info = await getModelInfo(modelId);
80
- if (info.task && info.task !== 'unknown') {
81
- return info.task;
82
- }
83
- const tags = info.tags || [];
84
- if (tags.includes('automatic-speech-recognition') || tags.includes('audio')) {
85
- return 'automatic-speech-recognition';
86
- }
87
- if (tags.includes('text-generation')) {
88
- return 'text-generation';
89
- }
90
- if (tags.includes('image-classification')) {
91
- return 'image-classification';
92
- }
93
- }
94
- catch {
95
- // Non-fatal
96
- }
97
- return 'text-generation';
98
- }
99
- /**
100
- * Load any ML model for in-browser execution with zero ceremony.
101
- *
102
- * @param modelId - Hugging Face model ID (e.g. 'onnx-community/whisper-tiny.en') or URL
103
- * @param options - Configuration options
104
- * @returns Ready-to-use callable model instance
105
- */
106
- async function webmlImpl(modelId, options = {}) {
107
- const task = options.task ?? (await inferTask(modelId));
108
- if (task === 'decision') {
109
- const engine = createDecisionEngine({
110
- model: modelId,
111
- onProgress: options.onProgress
112
- ? (e) => options.onProgress?.({
113
- status: e.status,
114
- loaded: e.loaded,
115
- total: e.total,
116
- percent: e.percent,
117
- file: e.detail,
118
- })
119
- : undefined,
120
- });
121
- await engine.init();
122
- const runner = async (input, runOptions) => {
123
- if (typeof input === 'object' && input !== null && 'options' in input) {
124
- return engine.choice(input);
125
- }
126
- if (typeof input === 'object' && input !== null && 'statement' in input) {
127
- return engine.noul(input);
128
- }
129
- if (typeof input === 'object' && input !== null && 'criteria' in input) {
130
- return engine.score(input);
131
- }
132
- return engine.choice({
133
- state: input,
134
- options: runOptions?.options || ['yes', 'no'],
135
- });
136
- };
137
- const model = Object.assign(runner, {
138
- task,
139
- modelId,
140
- client: null,
141
- run: async (input, runOptions) => {
142
- return runner(input, runOptions);
143
- },
144
- dispose: () => {
145
- engine.dispose();
146
- },
147
- choice: (choiceInput) => engine.choice(choiceInput),
148
- directChoice: (choiceInput) => engine.directChoice(choiceInput),
149
- noul: (noulInput) => engine.noul(noulInput),
150
- score: (scoreInput) => engine.score(scoreInput),
151
- stream: () => {
152
- throw new Error('Streaming is not supported for decision models');
153
- },
154
- generate: async () => {
155
- throw new Error('generate is not supported for decision models; use choice() or score()');
156
- },
157
- transcribe: async () => {
158
- throw new Error('transcribe is not supported for decision models');
159
- },
160
- classify: async () => {
161
- throw new Error('Use choice() or score() for decision models');
162
- },
163
- embed: async () => {
164
- throw new Error('embed is not supported for decision models');
165
- },
166
- detect: async () => {
167
- throw new Error('detect is not supported for decision models');
168
- },
169
- listen: async () => {
170
- throw new Error('listen is not supported for decision models');
171
- },
172
- });
173
- return model;
174
- }
175
- const client = new ModelClient(options.workerUrl);
176
- await client.load({
177
- task,
178
- modelId,
179
- dtype: options.dtype,
180
- device: options.device,
181
- revision: options.revision,
182
- onProgress: options.onProgress,
183
- });
184
- const runner = async (input, runOptions) => {
185
- if (task === 'automatic-speech-recognition') {
186
- const pcm = await coerceAudio(input);
187
- return client.run('automatic-speech-recognition', pcm, runOptions);
188
- }
189
- return client.run(task, input, runOptions);
190
- };
191
- const model = Object.assign(runner, {
192
- task,
193
- modelId,
194
- client,
195
- run: (input, runOptions) => {
196
- return runner(input, runOptions);
197
- },
198
- dispose: () => {
199
- client.dispose();
200
- client.terminate();
201
- },
202
- stream: (input, genOptions) => {
203
- return client.stream(input, genOptions);
204
- },
205
- generate: (input, genOptions) => {
206
- return client.generate(input, genOptions);
207
- },
208
- transcribe: async (input, runOptions) => {
209
- const pcm = await coerceAudio(input);
210
- return client.run('automatic-speech-recognition', pcm, runOptions);
211
- },
212
- classify: (input, runOptions) => {
213
- return client.run('image-classification', input, runOptions);
214
- },
215
- embed: (input, runOptions) => {
216
- return client.run('feature-extraction', input, runOptions);
217
- },
218
- detect: (input, runOptions) => {
219
- return client.run('object-detection', input, runOptions);
220
- },
221
- listen: async (listenOptions) => {
222
- return listenMic(async (pcm) => {
223
- try {
224
- const res = await client.run('automatic-speech-recognition', pcm);
225
- if (res?.text?.trim()) {
226
- listenOptions.onTranscript(res.text.trim());
227
- }
228
- }
229
- catch (err) {
230
- console.warn('Transcription error during mic listen:', err);
231
- }
232
- }, { intervalSeconds: listenOptions.intervalSeconds });
233
- },
234
- });
235
- return model;
236
- }
237
- export const webml = Object.assign(webmlImpl, {
238
- decision: (options) => {
239
- return createDecisionEngine(options);
240
- },
241
- directChoice: (input, options) => {
242
- return directChoice(input, options);
243
- },
244
- });
245
- export default webml;
246
- //# sourceMappingURL=loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
@@ -1,149 +0,0 @@
1
- /**
2
- * Main-thread client for communicating with the ML worker.
3
- *
4
- * Wraps the Web Worker's postMessage protocol with a promise-based API,
5
- * AsyncIterable token streaming, and typed events.
6
- *
7
- * ```ts
8
- * import { ModelClient } from 'webml-kit';
9
- *
10
- * const client = new ModelClient();
11
- *
12
- * // Check device capabilities
13
- * const device = await client.detect();
14
- * console.log(device.backend); // 'webgpu'
15
- *
16
- * // Load a model
17
- * await client.load({
18
- * task: 'text-generation',
19
- * modelId: 'onnx-community/Bonsai-1.7B-ONNX',
20
- * dtype: 'q4',
21
- * onProgress: ({ percent }) => console.log(`${percent}%`),
22
- * });
23
- *
24
- * // Stream text generation
25
- * for await (const { token, tps } of client.stream('Hello!')) {
26
- * process.stdout.write(token);
27
- * }
28
- *
29
- * // One-shot inference
30
- * const labels = await client.run('image-classification', imageBlob);
31
- * ```
32
- */
33
- import type { DeviceInfo, ModelConfig, PipelineTask, ProgressCallback, TextGenerationOptions, TextGenerationResult, ChatMessage } from './types.js';
34
- import { TokenStream } from './streaming.js';
35
- export interface LoadOptions extends ModelConfig {
36
- onProgress?: ProgressCallback;
37
- }
38
- export type ClientEventType = 'progress' | 'ready' | 'error' | 'device-lost' | 'device-recovered';
39
- type Listener = (data: unknown) => void;
40
- export declare class ModelClient {
41
- private worker;
42
- private workerUrl;
43
- private listeners;
44
- private pendingRequests;
45
- private requestCounter;
46
- private deviceInfo;
47
- private loadedModels;
48
- private progressCallback;
49
- private gpuRecovery;
50
- /**
51
- * Create a new ModelClient.
52
- *
53
- * @param workerUrl - URL to the model-worker.js file. If omitted,
54
- * creates a Blob URL from the bundled worker (requires bundler support).
55
- */
56
- constructor(workerUrl?: string | URL);
57
- private getWorker;
58
- private send;
59
- private nextId;
60
- private handleMessage;
61
- /** Register an event listener. */
62
- on(event: ClientEventType, listener: Listener): this;
63
- /** Remove an event listener. */
64
- off(event: ClientEventType, listener: Listener): this;
65
- private emit;
66
- /**
67
- * Detect the best available compute backend.
68
- *
69
- * ```ts
70
- * const info = await client.detect();
71
- * console.log(info.backend); // 'webgpu'
72
- * console.log(info.gpu?.vendor); // 'apple'
73
- * console.log(info.recommendedDtype); // 'q4'
74
- * ```
75
- */
76
- detect(): Promise<DeviceInfo>;
77
- /**
78
- * Load a model pipeline.
79
- *
80
- * ```ts
81
- * await client.load({
82
- * task: 'text-generation',
83
- * modelId: 'onnx-community/Bonsai-1.7B-ONNX',
84
- * dtype: 'q4',
85
- * onProgress: ({ percent }) => updateUI(percent),
86
- * });
87
- * ```
88
- */
89
- load(options: LoadOptions): Promise<void>;
90
- /**
91
- * Run one-shot inference for any pipeline task.
92
- *
93
- * ```ts
94
- * // Image classification
95
- * const labels = await client.run('image-classification', imageUrl);
96
- *
97
- * // Speech recognition
98
- * const { text } = await client.run('automatic-speech-recognition', audioBlob);
99
- *
100
- * // Embeddings
101
- * const vectors = await client.run('feature-extraction', 'Hello world');
102
- * ```
103
- */
104
- run<T = unknown>(task: PipelineTask, input: unknown, options?: Record<string, unknown>): Promise<T>;
105
- /**
106
- * Generate text with streaming tokens.
107
- *
108
- * Returns an `AsyncIterable<TokenEvent>` that yields tokens as they're generated.
109
- *
110
- * ```ts
111
- * for await (const { token, tps } of client.stream('Tell me a joke')) {
112
- * process.stdout.write(token);
113
- * }
114
- * ```
115
- */
116
- stream(input: string | ChatMessage[], options?: TextGenerationOptions): TokenStream;
117
- /**
118
- * Generate text and wait for the complete result.
119
- *
120
- * ```ts
121
- * const { text, tps, numTokens } = await client.generate('Hello!');
122
- * ```
123
- */
124
- generate(input: string | ChatMessage[], options?: TextGenerationOptions): Promise<TextGenerationResult>;
125
- /**
126
- * Interrupt an ongoing text generation.
127
- */
128
- interrupt(): void;
129
- /**
130
- * Reset the KV cache (start a new conversation).
131
- */
132
- reset(): void;
133
- /**
134
- * Dispose a loaded model and free memory.
135
- *
136
- * @param modelKey - Specific model key (task::modelId), or omit to dispose all.
137
- */
138
- dispose(modelKey?: string): void;
139
- /**
140
- * Check if a model is currently loaded.
141
- */
142
- isLoaded(task: PipelineTask, modelId: string): boolean;
143
- /**
144
- * Terminate the worker completely.
145
- */
146
- terminate(): void;
147
- }
148
- export {};
149
- //# sourceMappingURL=model-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-client.d.ts","sourceRoot":"","sources":["../src/model-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EAIpB,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,WAAW,EAAiB,MAAM,gBAAgB,CAAC;AAK5D,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,MAAM,eAAe,GACvB,UAAU,GACV,OAAO,GACP,OAAO,GACP,aAAa,GACb,kBAAkB,CAAC;AAEvB,KAAK,QAAQ,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;AAIxC,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,SAAS,CAA6C;IAC9D,OAAO,CAAC,eAAe,CAOnB;IACJ,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,WAAW,CAAc;IAEjC;;;;;OAKG;gBACS,SAAS,CAAC,EAAE,MAAM,GAAG,GAAG;IAcpC,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,aAAa;IA8ErB,kCAAkC;IAClC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAQpD,gCAAgC;IAChC,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAKrD,OAAO,CAAC,IAAI;IAMZ;;;;;;;;;OASG;IACG,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC;IASnC;;;;;;;;;;;OAWG;IACG,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/C;;;;;;;;;;;;;OAaG;IACG,GAAG,CAAC,CAAC,GAAG,OAAO,EACnB,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,CAAC,CAAC;IASb;;;;;;;;;;OAUG;IACH,MAAM,CACJ,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,EAC7B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,WAAW;IAqBd;;;;;;OAMG;IACG,QAAQ,CACZ,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,EAC7B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,oBAAoB,CAAC;IAShC;;OAEG;IACH,SAAS,IAAI,IAAI;IAIjB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAShC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAItD;;OAEG;IACH,SAAS,IAAI,IAAI;CAOlB"}