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.
- package/package.json +3 -3
- package/dist/cache.d.ts +0 -46
- package/dist/cache.d.ts.map +0 -1
- package/dist/cache.js +0 -161
- package/dist/cache.js.map +0 -1
- package/dist/decision.d.ts +0 -182
- package/dist/decision.d.ts.map +0 -1
- package/dist/decision.js +0 -789
- package/dist/decision.js.map +0 -1
- package/dist/device.d.ts +0 -86
- package/dist/device.d.ts.map +0 -1
- package/dist/device.js +0 -195
- package/dist/device.js.map +0 -1
- package/dist/gpu-recovery.d.ts +0 -61
- package/dist/gpu-recovery.d.ts.map +0 -1
- package/dist/gpu-recovery.js +0 -105
- package/dist/gpu-recovery.js.map +0 -1
- package/dist/hub.d.ts +0 -97
- package/dist/hub.d.ts.map +0 -1
- package/dist/hub.js +0 -142
- package/dist/hub.js.map +0 -1
- package/dist/index.d.ts +0 -63
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -65
- package/dist/index.js.map +0 -1
- package/dist/inputs.d.ts +0 -27
- package/dist/inputs.d.ts.map +0 -1
- package/dist/inputs.js +0 -155
- package/dist/inputs.js.map +0 -1
- package/dist/loader.d.ts +0 -100
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -246
- package/dist/loader.js.map +0 -1
- package/dist/model-client.d.ts +0 -149
- package/dist/model-client.d.ts.map +0 -1
- package/dist/model-client.js +0 -318
- package/dist/model-client.js.map +0 -1
- package/dist/model-worker.d.ts +0 -16
- package/dist/model-worker.d.ts.map +0 -1
- package/dist/model-worker.js +0 -340
- package/dist/model-worker.js.map +0 -1
- package/dist/onnx-pipeline.d.ts +0 -20
- package/dist/onnx-pipeline.d.ts.map +0 -1
- package/dist/onnx-pipeline.js +0 -462
- package/dist/onnx-pipeline.js.map +0 -1
- package/dist/pipelines/index.d.ts +0 -28
- package/dist/pipelines/index.d.ts.map +0 -1
- package/dist/pipelines/index.js +0 -140
- package/dist/pipelines/index.js.map +0 -1
- package/dist/shim-ort.d.ts +0 -6
- package/dist/shim-ort.d.ts.map +0 -1
- package/dist/shim-ort.js +0 -38
- package/dist/shim-ort.js.map +0 -1
- package/dist/streaming.d.ts +0 -55
- package/dist/streaming.d.ts.map +0 -1
- package/dist/streaming.js +0 -142
- package/dist/streaming.js.map +0 -1
- package/dist/types.d.ts +0 -200
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
- package/dist/webml-kit.browser.js +0 -2568
package/dist/hub.js
DELETED
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Search and list WebGPU/ONNX-compatible models from the Hugging Face Hub.
|
|
3
|
-
*
|
|
4
|
-
* Uses the public HF Hub API — no auth token needed for public models.
|
|
5
|
-
*/
|
|
6
|
-
// ─── Constants ───
|
|
7
|
-
const HF_API = 'https://huggingface.co/api';
|
|
8
|
-
/** Known orgs that publish ONNX/WebGPU-ready models */
|
|
9
|
-
export const WEBGPU_ORGS = [
|
|
10
|
-
'onnx-community',
|
|
11
|
-
'Xenova',
|
|
12
|
-
'webml-community',
|
|
13
|
-
];
|
|
14
|
-
// ─── Core functions ───
|
|
15
|
-
/**
|
|
16
|
-
* Search for models compatible with transformers.js (and thus WebGPU/WASM).
|
|
17
|
-
*
|
|
18
|
-
* ```ts
|
|
19
|
-
* import { searchModels } from 'webml-kit';
|
|
20
|
-
*
|
|
21
|
-
* const models = await searchModels({ task: 'text-generation', limit: 5 });
|
|
22
|
-
* for (const m of models) {
|
|
23
|
-
* console.log(`${m.modelId} — ${m.downloads} downloads`);
|
|
24
|
-
* }
|
|
25
|
-
* ```
|
|
26
|
-
*/
|
|
27
|
-
export async function searchModels(options = {}) {
|
|
28
|
-
const params = new URLSearchParams();
|
|
29
|
-
// Only show models that work with transformers.js
|
|
30
|
-
params.set('library', 'transformers.js');
|
|
31
|
-
if (options.task)
|
|
32
|
-
params.set('pipeline_tag', options.task);
|
|
33
|
-
if (options.query)
|
|
34
|
-
params.set('search', options.query);
|
|
35
|
-
if (options.author)
|
|
36
|
-
params.set('author', options.author);
|
|
37
|
-
if (options.sort === 'trending') {
|
|
38
|
-
params.set('sort', 'trending');
|
|
39
|
-
}
|
|
40
|
-
else if (options.sort) {
|
|
41
|
-
params.set('sort', options.sort === 'modified' ? 'lastModified' : options.sort);
|
|
42
|
-
params.set('direction', options.direction === 'asc' ? '1' : '-1');
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
params.set('sort', 'downloads');
|
|
46
|
-
params.set('direction', '-1');
|
|
47
|
-
}
|
|
48
|
-
params.set('limit', String(Math.min(options.limit ?? 20, 100)));
|
|
49
|
-
const url = `${HF_API}/models?${params.toString()}`;
|
|
50
|
-
const response = await fetch(url);
|
|
51
|
-
if (!response.ok) {
|
|
52
|
-
throw new Error(`HF Hub API error: ${response.status} ${response.statusText}`);
|
|
53
|
-
}
|
|
54
|
-
const data = await response.json();
|
|
55
|
-
return data.map(normalizeModel);
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* List popular models for a specific task, sorted by downloads.
|
|
59
|
-
*
|
|
60
|
-
* ```ts
|
|
61
|
-
* import { listModelsForTask } from 'webml-kit';
|
|
62
|
-
*
|
|
63
|
-
* const models = await listModelsForTask('automatic-speech-recognition');
|
|
64
|
-
* // [{ modelId: 'onnx-community/whisper-tiny.en', downloads: 12345, ... }]
|
|
65
|
-
* ```
|
|
66
|
-
*/
|
|
67
|
-
export async function listModelsForTask(task, limit = 10) {
|
|
68
|
-
return searchModels({ task, sort: 'downloads', limit });
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* List trending transformers.js models right now.
|
|
72
|
-
*
|
|
73
|
-
* ```ts
|
|
74
|
-
* import { trendingModels } from 'webml-kit';
|
|
75
|
-
*
|
|
76
|
-
* const hot = await trendingModels(5);
|
|
77
|
-
* ```
|
|
78
|
-
*/
|
|
79
|
-
export async function trendingModels(limit = 10) {
|
|
80
|
-
return searchModels({ sort: 'trending', limit });
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* List all models from known WebGPU-friendly orgs
|
|
84
|
-
* (onnx-community, Xenova, webml-community).
|
|
85
|
-
*
|
|
86
|
-
* ```ts
|
|
87
|
-
* import { listWebGPUModels } from 'webml-kit';
|
|
88
|
-
*
|
|
89
|
-
* const models = await listWebGPUModels({ task: 'text-generation' });
|
|
90
|
-
* ```
|
|
91
|
-
*/
|
|
92
|
-
export async function listWebGPUModels(options = {}) {
|
|
93
|
-
const results = [];
|
|
94
|
-
for (const org of WEBGPU_ORGS) {
|
|
95
|
-
const models = await searchModels({ ...options, author: org });
|
|
96
|
-
results.push(...models);
|
|
97
|
-
}
|
|
98
|
-
// Deduplicate by modelId and sort by downloads
|
|
99
|
-
const seen = new Set();
|
|
100
|
-
return results
|
|
101
|
-
.filter((m) => {
|
|
102
|
-
if (seen.has(m.modelId))
|
|
103
|
-
return false;
|
|
104
|
-
seen.add(m.modelId);
|
|
105
|
-
return true;
|
|
106
|
-
})
|
|
107
|
-
.sort((a, b) => b.downloads - a.downloads);
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Get detailed info about a specific model.
|
|
111
|
-
*
|
|
112
|
-
* ```ts
|
|
113
|
-
* import { getModelInfo } from 'webml-kit';
|
|
114
|
-
*
|
|
115
|
-
* const info = await getModelInfo('onnx-community/Bonsai-1.7B-ONNX');
|
|
116
|
-
* console.log(info.task, info.downloads, info.webgpuCompatible);
|
|
117
|
-
* ```
|
|
118
|
-
*/
|
|
119
|
-
export async function getModelInfo(modelId) {
|
|
120
|
-
const response = await fetch(`${HF_API}/models/${modelId}`);
|
|
121
|
-
if (!response.ok) {
|
|
122
|
-
throw new Error(`Model not found: ${modelId} (${response.status})`);
|
|
123
|
-
}
|
|
124
|
-
const data = await response.json();
|
|
125
|
-
return normalizeModel(data);
|
|
126
|
-
}
|
|
127
|
-
function normalizeModel(raw) {
|
|
128
|
-
const id = raw.modelId ?? raw.id ?? 'unknown';
|
|
129
|
-
const tags = raw.tags ?? [];
|
|
130
|
-
const author = raw.author ?? id.split('/')[0] ?? 'unknown';
|
|
131
|
-
return {
|
|
132
|
-
modelId: id,
|
|
133
|
-
task: (raw.pipeline_tag ?? 'unknown'),
|
|
134
|
-
author,
|
|
135
|
-
downloads: raw.downloads ?? 0,
|
|
136
|
-
likes: raw.likes ?? 0,
|
|
137
|
-
lastModified: raw.lastModified ?? '',
|
|
138
|
-
tags,
|
|
139
|
-
webgpuCompatible: tags.includes('onnx') || WEBGPU_ORGS.some((org) => id.startsWith(org)),
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
//# sourceMappingURL=hub.js.map
|
package/dist/hub.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hub.js","sourceRoot":"","sources":["../src/hub.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* webml-kit — Browser ML Made Easy
|
|
3
|
-
*
|
|
4
|
-
* Framework-agnostic utilities for loading and running ML models
|
|
5
|
-
* in the browser via WebGPU/WASM, powered by @huggingface/transformers.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```ts
|
|
9
|
-
* import { ModelClient, detectDevice, isCached } from 'webml-kit';
|
|
10
|
-
*
|
|
11
|
-
* // Check device
|
|
12
|
-
* const device = await detectDevice();
|
|
13
|
-
* console.log(device.backend); // 'webgpu'
|
|
14
|
-
*
|
|
15
|
-
* // Check cache
|
|
16
|
-
* if (await isCached('onnx-community/Bonsai-1.7B-ONNX')) {
|
|
17
|
-
* console.log('Model already downloaded!');
|
|
18
|
-
* }
|
|
19
|
-
*
|
|
20
|
-
* // Create client
|
|
21
|
-
* const client = new ModelClient(
|
|
22
|
-
* new URL('./model-worker.js', import.meta.url)
|
|
23
|
-
* );
|
|
24
|
-
*
|
|
25
|
-
* // Load model
|
|
26
|
-
* await client.load({
|
|
27
|
-
* task: 'text-generation',
|
|
28
|
-
* modelId: 'onnx-community/Bonsai-1.7B-ONNX',
|
|
29
|
-
* dtype: 'q4',
|
|
30
|
-
* onProgress: ({ percent }) => console.log(`${percent}%`),
|
|
31
|
-
* });
|
|
32
|
-
*
|
|
33
|
-
* // Stream tokens
|
|
34
|
-
* for await (const { token, tps } of client.stream('Hello!')) {
|
|
35
|
-
* process.stdout.write(token);
|
|
36
|
-
* }
|
|
37
|
-
* ```
|
|
38
|
-
*
|
|
39
|
-
* @packageDocumentation
|
|
40
|
-
*/
|
|
41
|
-
export { webml, inferTask } from './loader.js';
|
|
42
|
-
export type { WebMLOptions, LoadedModel } from './loader.js';
|
|
43
|
-
import webml from './loader.js';
|
|
44
|
-
export default webml;
|
|
45
|
-
export { coerceAudio, listenMic } from './inputs.js';
|
|
46
|
-
export type { ListenOptions, MicListener } from './inputs.js';
|
|
47
|
-
export { ModelClient } from './model-client.js';
|
|
48
|
-
export type { LoadOptions, ClientEventType } from './model-client.js';
|
|
49
|
-
export { detectDevice, checkWebGPU, checkWASM, getGPUAdapter, getGPUInfo, recommendDtype, canRun, parseSize, formatSize, } from './device.js';
|
|
50
|
-
export { getCacheBackend, isCached, getCacheSize, listCachedModels, clearCache, } from './cache.js';
|
|
51
|
-
export { TokenStream, collectStream } from './streaming.js';
|
|
52
|
-
export { GPURecovery } from './gpu-recovery.js';
|
|
53
|
-
export type { RecoveryState, GPURecoveryEvents } from './gpu-recovery.js';
|
|
54
|
-
export { PIPELINE_REGISTRY, getPipelineDefaults, supportsStreaming, } from './pipelines/index.js';
|
|
55
|
-
export type { PipelineDefaults } from './pipelines/index.js';
|
|
56
|
-
export { createOnnxPipeline, decodeCTC, decodeWavToFloat32, toFloat32Array, } from './onnx-pipeline.js';
|
|
57
|
-
export type { OnnxPipelineInstance } from './onnx-pipeline.js';
|
|
58
|
-
export { searchModels, listModelsForTask, trendingModels, listWebGPUModels, getModelInfo, WEBGPU_ORGS, } from './hub.js';
|
|
59
|
-
export type { HubModel, SearchOptions } from './hub.js';
|
|
60
|
-
export { createDecisionEngine, directChoice, OPENJEV_MODELS, HeuristicDecisionEngine, OpenJevWllamaEngine, normalizeOptions, normalizeCriteria, validateModelOptions, } from './decision.js';
|
|
61
|
-
export type { DecisionEngine, DecisionEngineOptions, ChoiceInput, ChoiceResult, NoulInput, NoulResult, ScoreInput, ScoreResult, OpenJevModelPreset, OpenJevModelInfo, DecisionProgressEvent, DecisionProgressCallback, } from './decision.js';
|
|
62
|
-
export type { DeviceBackend, DeviceInfo, GPUInfo, QuantizationType, PipelineTask, ModelConfig, ProgressEvent, ProgressCallback, TokenEvent, ChatMessage, TextGenerationOptions, TextGenerationResult, ClassificationResult, DetectionResult, TranscriptionResult, EmbeddingResult, CaptionResult, TextResult, CacheBackend, CachedModel, } from './types.js';
|
|
63
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAGH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,eAAe,KAAK,CAAC;AAGrB,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGtE,OAAO,EACL,YAAY,EACZ,WAAW,EACX,SAAS,EACT,aAAa,EACb,UAAU,EACV,cAAc,EACd,MAAM,EACN,SAAS,EACT,UAAU,GACX,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,UAAU,GACX,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG5D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG1E,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,OAAO,EACL,kBAAkB,EAClB,SAAS,EACT,kBAAkB,EAClB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG/D,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACZ,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGxD,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,aAAa,EACb,UAAU,EACV,OAAO,EACP,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC"}
|
package/dist/index.js
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* webml-kit — Browser ML Made Easy
|
|
3
|
-
*
|
|
4
|
-
* Framework-agnostic utilities for loading and running ML models
|
|
5
|
-
* in the browser via WebGPU/WASM, powered by @huggingface/transformers.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```ts
|
|
9
|
-
* import { ModelClient, detectDevice, isCached } from 'webml-kit';
|
|
10
|
-
*
|
|
11
|
-
* // Check device
|
|
12
|
-
* const device = await detectDevice();
|
|
13
|
-
* console.log(device.backend); // 'webgpu'
|
|
14
|
-
*
|
|
15
|
-
* // Check cache
|
|
16
|
-
* if (await isCached('onnx-community/Bonsai-1.7B-ONNX')) {
|
|
17
|
-
* console.log('Model already downloaded!');
|
|
18
|
-
* }
|
|
19
|
-
*
|
|
20
|
-
* // Create client
|
|
21
|
-
* const client = new ModelClient(
|
|
22
|
-
* new URL('./model-worker.js', import.meta.url)
|
|
23
|
-
* );
|
|
24
|
-
*
|
|
25
|
-
* // Load model
|
|
26
|
-
* await client.load({
|
|
27
|
-
* task: 'text-generation',
|
|
28
|
-
* modelId: 'onnx-community/Bonsai-1.7B-ONNX',
|
|
29
|
-
* dtype: 'q4',
|
|
30
|
-
* onProgress: ({ percent }) => console.log(`${percent}%`),
|
|
31
|
-
* });
|
|
32
|
-
*
|
|
33
|
-
* // Stream tokens
|
|
34
|
-
* for await (const { token, tps } of client.stream('Hello!')) {
|
|
35
|
-
* process.stdout.write(token);
|
|
36
|
-
* }
|
|
37
|
-
* ```
|
|
38
|
-
*
|
|
39
|
-
* @packageDocumentation
|
|
40
|
-
*/
|
|
41
|
-
// ─── Functional API (Default Export) ───
|
|
42
|
-
export { webml, inferTask } from './loader.js';
|
|
43
|
-
import webml from './loader.js';
|
|
44
|
-
export default webml;
|
|
45
|
-
// ─── Input & Media Helpers ───
|
|
46
|
-
export { coerceAudio, listenMic } from './inputs.js';
|
|
47
|
-
// ─── Core ───
|
|
48
|
-
export { ModelClient } from './model-client.js';
|
|
49
|
-
// ─── Device Detection ───
|
|
50
|
-
export { detectDevice, checkWebGPU, checkWASM, getGPUAdapter, getGPUInfo, recommendDtype, canRun, parseSize, formatSize, } from './device.js';
|
|
51
|
-
// ─── Cache ───
|
|
52
|
-
export { getCacheBackend, isCached, getCacheSize, listCachedModels, clearCache, } from './cache.js';
|
|
53
|
-
// ─── Streaming ───
|
|
54
|
-
export { TokenStream, collectStream } from './streaming.js';
|
|
55
|
-
// ─── GPU Recovery ───
|
|
56
|
-
export { GPURecovery } from './gpu-recovery.js';
|
|
57
|
-
// ─── Pipelines ───
|
|
58
|
-
export { PIPELINE_REGISTRY, getPipelineDefaults, supportsStreaming, } from './pipelines/index.js';
|
|
59
|
-
// ─── ONNX Pipelines ───
|
|
60
|
-
export { createOnnxPipeline, decodeCTC, decodeWavToFloat32, toFloat32Array, } from './onnx-pipeline.js';
|
|
61
|
-
// ─── Hub Search ───
|
|
62
|
-
export { searchModels, listModelsForTask, trendingModels, listWebGPUModels, getModelInfo, WEBGPU_ORGS, } from './hub.js';
|
|
63
|
-
// ─── Jev System One / OpenJev Decision Capabilities ───
|
|
64
|
-
export { createDecisionEngine, directChoice, OPENJEV_MODELS, HeuristicDecisionEngine, OpenJevWllamaEngine, normalizeOptions, normalizeCriteria, validateModelOptions, } from './decision.js';
|
|
65
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,0CAA0C;AAC1C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,eAAe,KAAK,CAAC;AAErB,gCAAgC;AAChC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGrD,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,2BAA2B;AAC3B,OAAO,EACL,YAAY,EACZ,WAAW,EACX,SAAS,EACT,aAAa,EACb,UAAU,EACV,cAAc,EACd,MAAM,EACN,SAAS,EACT,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,gBAAgB;AAChB,OAAO,EACL,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,oBAAoB;AACpB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE5D,uBAAuB;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,oBAAoB;AACpB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAG9B,yBAAyB;AACzB,OAAO,EACL,kBAAkB,EAClB,SAAS,EACT,kBAAkB,EAClB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAG5B,qBAAqB;AACrB,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACZ,MAAM,UAAU,CAAC;AAGlB,yDAAyD;AACzD,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAC"}
|
package/dist/inputs.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Universal input coercion and browser media helpers.
|
|
3
|
-
*
|
|
4
|
-
* Automatically converts URLs, Blobs, Files, AudioBuffers, and arrays
|
|
5
|
-
* into the exact formats expected by ML models.
|
|
6
|
-
*/
|
|
7
|
-
export interface ListenOptions {
|
|
8
|
-
/** Target sample rate in Hz (default: 16000) */
|
|
9
|
-
sampleRate?: number;
|
|
10
|
-
/** Chunk interval in seconds for streaming callback (default: 3) */
|
|
11
|
-
intervalSeconds?: number;
|
|
12
|
-
/** Callback fired for each audio chunk */
|
|
13
|
-
onChunk?: (pcm: Float32Array) => void;
|
|
14
|
-
}
|
|
15
|
-
export interface MicListener {
|
|
16
|
-
stop: () => void;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Coerces various audio formats (URL, File, Blob, AudioBuffer, ArrayBuffer, Array)
|
|
20
|
-
* into a standardized 16kHz Float32Array PCM buffer.
|
|
21
|
-
*/
|
|
22
|
-
export declare function coerceAudio(input: unknown): Promise<Float32Array>;
|
|
23
|
-
/**
|
|
24
|
-
* Capture microphone audio from browser and invoke callback with Float32Array PCM.
|
|
25
|
-
*/
|
|
26
|
-
export declare function listenMic(onChunk: (pcm: Float32Array) => void, options?: ListenOptions): Promise<MicListener>;
|
|
27
|
-
//# sourceMappingURL=inputs.d.ts.map
|
package/dist/inputs.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../src/inputs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAkEvE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,EACpC,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,WAAW,CAAC,CAoFtB"}
|
package/dist/inputs.js
DELETED
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Universal input coercion and browser media helpers.
|
|
3
|
-
*
|
|
4
|
-
* Automatically converts URLs, Blobs, Files, AudioBuffers, and arrays
|
|
5
|
-
* into the exact formats expected by ML models.
|
|
6
|
-
*/
|
|
7
|
-
import { decodeWavToFloat32 } from './onnx-pipeline.js';
|
|
8
|
-
/**
|
|
9
|
-
* Coerces various audio formats (URL, File, Blob, AudioBuffer, ArrayBuffer, Array)
|
|
10
|
-
* into a standardized 16kHz Float32Array PCM buffer.
|
|
11
|
-
*/
|
|
12
|
-
export async function coerceAudio(input) {
|
|
13
|
-
if (input instanceof Float32Array) {
|
|
14
|
-
return input;
|
|
15
|
-
}
|
|
16
|
-
if (Array.isArray(input)) {
|
|
17
|
-
return new Float32Array(input);
|
|
18
|
-
}
|
|
19
|
-
if (input instanceof ArrayBuffer) {
|
|
20
|
-
return decodeWavToFloat32(input);
|
|
21
|
-
}
|
|
22
|
-
if (ArrayBuffer.isView(input)) {
|
|
23
|
-
if (input instanceof Uint8Array) {
|
|
24
|
-
const copy = new Uint8Array(input.byteLength);
|
|
25
|
-
copy.set(new Uint8Array(input.buffer, input.byteOffset, input.byteLength));
|
|
26
|
-
return decodeWavToFloat32(copy.buffer);
|
|
27
|
-
}
|
|
28
|
-
return new Float32Array(input.buffer, input.byteOffset, Math.floor(input.byteLength / 4));
|
|
29
|
-
}
|
|
30
|
-
// Handle Blob / File
|
|
31
|
-
if (typeof Blob !== 'undefined' && input instanceof Blob) {
|
|
32
|
-
const buffer = await input.arrayBuffer();
|
|
33
|
-
// Try decoding via browser AudioContext if available for compressed formats (mp3/ogg/m4a)
|
|
34
|
-
if (typeof AudioContext !== 'undefined' || typeof globalThis.webkitAudioContext !== 'undefined') {
|
|
35
|
-
try {
|
|
36
|
-
const AudioCtx = globalThis.AudioContext || globalThis.webkitAudioContext;
|
|
37
|
-
const ctx = new AudioCtx({ sampleRate: 16000 });
|
|
38
|
-
const audioBuf = await ctx.decodeAudioData(buffer.slice(0));
|
|
39
|
-
ctx.close();
|
|
40
|
-
return audioBuf.getChannelData(0);
|
|
41
|
-
}
|
|
42
|
-
catch {
|
|
43
|
-
// Fallback to WAV parser
|
|
44
|
-
return decodeWavToFloat32(buffer);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return decodeWavToFloat32(buffer);
|
|
48
|
-
}
|
|
49
|
-
// Handle URL string
|
|
50
|
-
if (typeof input === 'string') {
|
|
51
|
-
const response = await fetch(input);
|
|
52
|
-
if (!response.ok) {
|
|
53
|
-
throw new Error(`Failed to fetch audio from ${input}: ${response.status} ${response.statusText}`);
|
|
54
|
-
}
|
|
55
|
-
const buffer = await response.arrayBuffer();
|
|
56
|
-
return decodeWavToFloat32(buffer);
|
|
57
|
-
}
|
|
58
|
-
// Handle object with .audio or .pcm property
|
|
59
|
-
if (typeof input === 'object' && input !== null) {
|
|
60
|
-
if ('audio' in input) {
|
|
61
|
-
return coerceAudio(input.audio);
|
|
62
|
-
}
|
|
63
|
-
if ('pcm' in input) {
|
|
64
|
-
return coerceAudio(input.pcm);
|
|
65
|
-
}
|
|
66
|
-
// Handle Web Audio API AudioBuffer
|
|
67
|
-
if ('getChannelData' in input && typeof input.getChannelData === 'function') {
|
|
68
|
-
return input.getChannelData(0);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
throw new Error(`Unsupported audio input type: ${typeof input}`);
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Capture microphone audio from browser and invoke callback with Float32Array PCM.
|
|
75
|
-
*/
|
|
76
|
-
export async function listenMic(onChunk, options = {}) {
|
|
77
|
-
if (typeof navigator === 'undefined' || !navigator.mediaDevices?.getUserMedia) {
|
|
78
|
-
throw new Error('Microphone access is only available in browser environments with getUserMedia.');
|
|
79
|
-
}
|
|
80
|
-
const sampleRate = options.sampleRate ?? 16000;
|
|
81
|
-
const intervalSeconds = options.intervalSeconds ?? 3;
|
|
82
|
-
const stream = await navigator.mediaDevices.getUserMedia({
|
|
83
|
-
audio: {
|
|
84
|
-
sampleRate,
|
|
85
|
-
channelCount: 1,
|
|
86
|
-
echoCancellation: true,
|
|
87
|
-
noiseSuppression: true,
|
|
88
|
-
},
|
|
89
|
-
});
|
|
90
|
-
const AudioCtx = globalThis.AudioContext || globalThis.webkitAudioContext;
|
|
91
|
-
const audioCtx = new AudioCtx({ sampleRate });
|
|
92
|
-
const source = audioCtx.createMediaStreamSource(stream);
|
|
93
|
-
let pcmBuffer = [];
|
|
94
|
-
const maxSamples = Math.floor(sampleRate * intervalSeconds);
|
|
95
|
-
let workletNode = null;
|
|
96
|
-
let scriptProcessor = null;
|
|
97
|
-
const handleData = (inputData) => {
|
|
98
|
-
for (let i = 0; i < inputData.length; i++) {
|
|
99
|
-
pcmBuffer.push(inputData[i]);
|
|
100
|
-
}
|
|
101
|
-
if (pcmBuffer.length >= maxSamples) {
|
|
102
|
-
const chunk = new Float32Array(pcmBuffer);
|
|
103
|
-
pcmBuffer = [];
|
|
104
|
-
onChunk(chunk);
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
if (audioCtx.audioWorklet && typeof AudioWorkletNode !== 'undefined') {
|
|
108
|
-
const workletCode = `
|
|
109
|
-
class RecorderProcessor extends AudioWorkletProcessor {
|
|
110
|
-
process(inputs) {
|
|
111
|
-
const input = inputs[0];
|
|
112
|
-
if (input && input[0]) {
|
|
113
|
-
this.port.postMessage(input[0]);
|
|
114
|
-
}
|
|
115
|
-
return true;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
registerProcessor('recorder-processor', RecorderProcessor);
|
|
119
|
-
`;
|
|
120
|
-
const blob = new Blob([workletCode], { type: 'application/javascript' });
|
|
121
|
-
const workletUrl = URL.createObjectURL(blob);
|
|
122
|
-
await audioCtx.audioWorklet.addModule(workletUrl);
|
|
123
|
-
URL.revokeObjectURL(workletUrl);
|
|
124
|
-
workletNode = new AudioWorkletNode(audioCtx, 'recorder-processor');
|
|
125
|
-
workletNode.port.onmessage = (e) => {
|
|
126
|
-
handleData(e.data);
|
|
127
|
-
};
|
|
128
|
-
source.connect(workletNode);
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
// Fallback for legacy environments lacking AudioWorklet
|
|
132
|
-
const bufferSize = 4096;
|
|
133
|
-
scriptProcessor = audioCtx.createScriptProcessor(bufferSize, 1, 1);
|
|
134
|
-
scriptProcessor.onaudioprocess = (e) => {
|
|
135
|
-
handleData(e.inputBuffer.getChannelData(0));
|
|
136
|
-
};
|
|
137
|
-
source.connect(scriptProcessor);
|
|
138
|
-
scriptProcessor.connect(audioCtx.destination);
|
|
139
|
-
}
|
|
140
|
-
const stop = () => {
|
|
141
|
-
if (pcmBuffer.length > 0) {
|
|
142
|
-
onChunk(new Float32Array(pcmBuffer));
|
|
143
|
-
pcmBuffer = [];
|
|
144
|
-
}
|
|
145
|
-
if (workletNode)
|
|
146
|
-
workletNode.disconnect();
|
|
147
|
-
if (scriptProcessor)
|
|
148
|
-
scriptProcessor.disconnect();
|
|
149
|
-
source.disconnect();
|
|
150
|
-
stream.getTracks().forEach((track) => track.stop());
|
|
151
|
-
audioCtx.close();
|
|
152
|
-
};
|
|
153
|
-
return { stop };
|
|
154
|
-
}
|
|
155
|
-
//# sourceMappingURL=inputs.js.map
|
package/dist/inputs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inputs.js","sourceRoot":"","sources":["../src/inputs.ts"],"names":[],"mappings":"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"}
|
package/dist/loader.d.ts
DELETED
|
@@ -1,100 +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 { type MicListener } from './inputs.js';
|
|
27
|
-
import type { PipelineTask, QuantizationType, DeviceBackend, TranscriptionResult, ClassificationResult, DetectionResult, EmbeddingResult, TextGenerationOptions, TextGenerationResult, ChatMessage, ProgressCallback } from './types.js';
|
|
28
|
-
import { TokenStream } from './streaming.js';
|
|
29
|
-
import { type DecisionEngine, type DecisionEngineOptions, type ChoiceInput, type ChoiceResult, type NoulInput, type NoulResult, type ScoreInput, type ScoreResult } from './decision.js';
|
|
30
|
-
export interface WebMLOptions {
|
|
31
|
-
/** Override pipeline task (auto-detected from HF metadata if omitted) */
|
|
32
|
-
task?: PipelineTask;
|
|
33
|
-
/** Quantization level (q4, q8, fp16, fp32, etc.) */
|
|
34
|
-
dtype?: QuantizationType;
|
|
35
|
-
/** Device backend preference ('webgpu' | 'wasm' | 'cpu') */
|
|
36
|
-
device?: DeviceBackend;
|
|
37
|
-
/** Hugging Face branch or revision */
|
|
38
|
-
revision?: string;
|
|
39
|
-
/** Custom worker script URL */
|
|
40
|
-
workerUrl?: string | URL;
|
|
41
|
-
/** Download / compilation progress callback */
|
|
42
|
-
onProgress?: ProgressCallback;
|
|
43
|
-
}
|
|
44
|
-
export interface LoadedModel {
|
|
45
|
-
/** The active pipeline task */
|
|
46
|
-
task: PipelineTask;
|
|
47
|
-
/** The model identifier or URL */
|
|
48
|
-
modelId: string;
|
|
49
|
-
/** The underlying ModelClient instance */
|
|
50
|
-
client: ModelClient;
|
|
51
|
-
/** Call the model on inputs directly */
|
|
52
|
-
(input: unknown, options?: Record<string, unknown>): Promise<unknown>;
|
|
53
|
-
/** Run inference */
|
|
54
|
-
run<T = unknown>(input: unknown, options?: Record<string, unknown>): Promise<T>;
|
|
55
|
-
/** Free memory and terminate worker */
|
|
56
|
-
dispose(): void;
|
|
57
|
-
/** Stream tokens for text generation */
|
|
58
|
-
stream(input: string | ChatMessage[], options?: TextGenerationOptions): TokenStream;
|
|
59
|
-
/** Generate full text completion */
|
|
60
|
-
generate(input: string | ChatMessage[], options?: TextGenerationOptions): Promise<TextGenerationResult>;
|
|
61
|
-
/** Transcribe audio (accepts Float32Array, Blob, File, URL, AudioBuffer) */
|
|
62
|
-
transcribe(input: unknown, options?: Record<string, unknown>): Promise<TranscriptionResult>;
|
|
63
|
-
/** Classify image */
|
|
64
|
-
classify(input: unknown, options?: Record<string, unknown>): Promise<ClassificationResult[]>;
|
|
65
|
-
/** Extract vector embeddings */
|
|
66
|
-
embed(input: string | string[], options?: Record<string, unknown>): Promise<EmbeddingResult>;
|
|
67
|
-
/** Detect objects in image */
|
|
68
|
-
detect(input: unknown, options?: Record<string, unknown>): Promise<DetectionResult[]>;
|
|
69
|
-
/** Direct choice evaluation (for decision models) */
|
|
70
|
-
choice?(input: ChoiceInput): Promise<ChoiceResult>;
|
|
71
|
-
/** Direct choice evaluation alias (for decision models) */
|
|
72
|
-
directChoice?(input: ChoiceInput): Promise<ChoiceResult>;
|
|
73
|
-
/** Direct binary evaluation (for decision models) */
|
|
74
|
-
noul?(input: NoulInput): Promise<NoulResult>;
|
|
75
|
-
/** Continuous scoring evaluation (for decision models) */
|
|
76
|
-
score?(input: ScoreInput): Promise<ScoreResult>;
|
|
77
|
-
/** Listen to live microphone audio in browser and transcribe on the fly */
|
|
78
|
-
listen(options: {
|
|
79
|
-
onTranscript: (text: string) => void;
|
|
80
|
-
intervalSeconds?: number;
|
|
81
|
-
}): Promise<MicListener>;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Automatically infers the pipeline task from modelId, file extensions, or Hugging Face metadata.
|
|
85
|
-
*/
|
|
86
|
-
export declare function inferTask(modelId: string): Promise<PipelineTask>;
|
|
87
|
-
/**
|
|
88
|
-
* Load any ML model for in-browser execution with zero ceremony.
|
|
89
|
-
*
|
|
90
|
-
* @param modelId - Hugging Face model ID (e.g. 'onnx-community/whisper-tiny.en') or URL
|
|
91
|
-
* @param options - Configuration options
|
|
92
|
-
* @returns Ready-to-use callable model instance
|
|
93
|
-
*/
|
|
94
|
-
declare function webmlImpl(modelId: string, options?: WebMLOptions): Promise<LoadedModel>;
|
|
95
|
-
export declare const webml: typeof webmlImpl & {
|
|
96
|
-
decision: (options?: DecisionEngineOptions) => DecisionEngine;
|
|
97
|
-
directChoice: (input: ChoiceInput, options?: DecisionEngineOptions) => Promise<ChoiceResult>;
|
|
98
|
-
};
|
|
99
|
-
export default webml;
|
|
100
|
-
//# sourceMappingURL=loader.d.ts.map
|
package/dist/loader.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|