@workglow/ai-provider 0.0.98 → 0.0.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{HFT_JobRunFns-ajak33q5.js → HFT_JobRunFns-aap9x58c.js} +8 -2
- package/dist/{HFT_JobRunFns-ajak33q5.js.map → HFT_JobRunFns-aap9x58c.js.map} +1 -1
- package/dist/anthropic/AnthropicProvider.d.ts +4 -4
- package/dist/anthropic/AnthropicProvider.d.ts.map +1 -1
- package/dist/anthropic/Anthropic_Worker.d.ts.map +1 -1
- package/dist/anthropic/common/Anthropic_JobRunFns.d.ts +4 -1
- package/dist/anthropic/common/Anthropic_JobRunFns.d.ts.map +1 -1
- package/dist/anthropic/index.js +21 -3
- package/dist/anthropic/index.js.map +4 -4
- package/dist/google-gemini/Gemini_Worker.d.ts.map +1 -1
- package/dist/google-gemini/GoogleGeminiProvider.d.ts +3 -3
- package/dist/google-gemini/GoogleGeminiProvider.d.ts.map +1 -1
- package/dist/google-gemini/common/Gemini_JobRunFns.d.ts +4 -1
- package/dist/google-gemini/common/Gemini_JobRunFns.d.ts.map +1 -1
- package/dist/google-gemini/index.js +21 -4
- package/dist/google-gemini/index.js.map +4 -4
- package/dist/hf-transformers/HFT_Worker.d.ts.map +1 -1
- package/dist/hf-transformers/HuggingFaceTransformersProvider.d.ts +3 -3
- package/dist/hf-transformers/HuggingFaceTransformersProvider.d.ts.map +1 -1
- package/dist/hf-transformers/common/HFT_JobRunFns.d.ts +61 -1
- package/dist/hf-transformers/common/HFT_JobRunFns.d.ts.map +1 -1
- package/dist/hf-transformers/index.js +10 -4
- package/dist/hf-transformers/index.js.map +3 -3
- package/dist/{index-kctzvn3c.js → index-236gqvq1.js} +12 -5
- package/dist/{index-kctzvn3c.js.map → index-236gqvq1.js.map} +3 -3
- package/dist/{index-9w5hs4zc.js → index-3tvpdt0s.js} +6 -4
- package/dist/{index-9w5hs4zc.js.map → index-3tvpdt0s.js.map} +3 -3
- package/dist/{index-2pvfsjyx.js → index-8jqhbz1h.js} +101 -141
- package/dist/index-8jqhbz1h.js.map +10 -0
- package/dist/{index-rmbnv0rw.js → index-b9310x5k.js} +5 -4
- package/dist/{index-rmbnv0rw.js.map → index-b9310x5k.js.map} +3 -3
- package/dist/{index-xyavfrb8.js → index-cfd8ne0j.js} +7 -4
- package/dist/{index-xyavfrb8.js.map → index-cfd8ne0j.js.map} +3 -3
- package/dist/{index-34rcjm0y.js → index-fgp2zg78.js} +8 -5
- package/dist/{index-34rcjm0y.js.map → index-fgp2zg78.js.map} +3 -3
- package/dist/{index-wnmajxg6.js → index-h5kwbbzq.js} +7 -4
- package/dist/{index-wnmajxg6.js.map → index-h5kwbbzq.js.map} +3 -3
- package/dist/{index-tn88s0ke.js → index-w496eeda.js} +6 -4
- package/dist/{index-tn88s0ke.js.map → index-w496eeda.js.map} +3 -3
- package/dist/index.js +10 -10
- package/dist/index.js.map +3 -3
- package/dist/provider-hf-inference/HfInferenceProvider.d.ts +2 -2
- package/dist/provider-hf-inference/HfInferenceProvider.d.ts.map +1 -1
- package/dist/provider-hf-inference/common/HFI_JobRunFns.d.ts.map +1 -1
- package/dist/provider-hf-inference/index.js +3 -3
- package/dist/provider-hf-inference/index.js.map +3 -3
- package/dist/provider-llamacpp/LlamaCppProvider.d.ts +3 -3
- package/dist/provider-llamacpp/LlamaCppProvider.d.ts.map +1 -1
- package/dist/provider-llamacpp/LlamaCpp_Worker.d.ts.map +1 -1
- package/dist/provider-llamacpp/common/LlamaCpp_JobRunFns.d.ts +4 -1
- package/dist/provider-llamacpp/common/LlamaCpp_JobRunFns.d.ts.map +1 -1
- package/dist/provider-llamacpp/index.js +18 -3
- package/dist/provider-llamacpp/index.js.map +4 -4
- package/dist/provider-ollama/OllamaProvider.d.ts +2 -2
- package/dist/provider-ollama/OllamaProvider.d.ts.map +1 -1
- package/dist/provider-ollama/index.browser.js +6 -4
- package/dist/provider-ollama/index.browser.js.map +3 -3
- package/dist/provider-ollama/index.js +1 -1
- package/dist/provider-openai/OpenAI_Worker.d.ts.map +1 -1
- package/dist/provider-openai/OpenAiProvider.d.ts +3 -3
- package/dist/provider-openai/OpenAiProvider.d.ts.map +1 -1
- package/dist/provider-openai/common/OpenAI_JobRunFns.d.ts +10 -1
- package/dist/provider-openai/common/OpenAI_JobRunFns.d.ts.map +1 -1
- package/dist/provider-openai/index.js +51 -4
- package/dist/provider-openai/index.js.map +4 -4
- package/dist/tf-mediapipe/TensorFlowMediaPipeProvider.d.ts +2 -2
- package/dist/tf-mediapipe/TensorFlowMediaPipeProvider.d.ts.map +1 -1
- package/dist/tf-mediapipe/index.js +3 -3
- package/dist/tf-mediapipe/index.js.map +3 -3
- package/package.json +25 -20
- package/dist/index-2pvfsjyx.js.map +0 -10
|
@@ -11,12 +11,27 @@ async function loadTransformersSDK() {
|
|
|
11
11
|
if (!_transformersSdk) {
|
|
12
12
|
try {
|
|
13
13
|
_transformersSdk = await import("@sroussey/transformers");
|
|
14
|
+
_transformersSdk.env.fetch = abortableFetch;
|
|
14
15
|
} catch {
|
|
15
16
|
throw new Error("@sroussey/transformers is required for HuggingFace Transformers tasks. Install it with: bun add @sroussey/transformers");
|
|
16
17
|
}
|
|
17
18
|
}
|
|
18
19
|
return _transformersSdk;
|
|
19
20
|
}
|
|
21
|
+
var modelAbortControllers = new Map;
|
|
22
|
+
function abortableFetch(url, options) {
|
|
23
|
+
let signal;
|
|
24
|
+
try {
|
|
25
|
+
const pathname = new URL(url).pathname;
|
|
26
|
+
for (const [modelPath, controller] of modelAbortControllers) {
|
|
27
|
+
if (pathname.includes(`/${modelPath}/`)) {
|
|
28
|
+
signal = controller.signal;
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
} catch {}
|
|
33
|
+
return fetch(url, { ...options, ...signal ? { signal } : {} });
|
|
34
|
+
}
|
|
20
35
|
var pipelines = new Map;
|
|
21
36
|
var pipelineLoadPromises = new Map;
|
|
22
37
|
function clearPipelineCache() {
|
|
@@ -27,7 +42,7 @@ function getPipelineCacheKey(model) {
|
|
|
27
42
|
const device = model.provider_config.device || "";
|
|
28
43
|
return `${model.provider_config.model_path}:${model.provider_config.pipeline}:${dtype}:${device}`;
|
|
29
44
|
}
|
|
30
|
-
var getPipeline = async (model, onProgress, options = {}, progressScaleMax = 10) => {
|
|
45
|
+
var getPipeline = async (model, onProgress, options = {}, signal, progressScaleMax = 10) => {
|
|
31
46
|
const cacheKey = getPipelineCacheKey(model);
|
|
32
47
|
if (pipelines.has(cacheKey)) {
|
|
33
48
|
return pipelines.get(cacheKey);
|
|
@@ -39,13 +54,13 @@ var getPipeline = async (model, onProgress, options = {}, progressScaleMax = 10)
|
|
|
39
54
|
if (cached)
|
|
40
55
|
return cached;
|
|
41
56
|
}
|
|
42
|
-
const loadPromise = doGetPipeline(model, onProgress, options, progressScaleMax, cacheKey).finally(() => {
|
|
57
|
+
const loadPromise = doGetPipeline(model, onProgress, options, progressScaleMax, cacheKey, signal).finally(() => {
|
|
43
58
|
pipelineLoadPromises.delete(cacheKey);
|
|
44
59
|
});
|
|
45
60
|
pipelineLoadPromises.set(cacheKey, loadPromise);
|
|
46
61
|
return loadPromise;
|
|
47
62
|
};
|
|
48
|
-
var doGetPipeline = async (model, onProgress, options, progressScaleMax, cacheKey) => {
|
|
63
|
+
var doGetPipeline = async (model, onProgress, options, progressScaleMax, cacheKey, signal) => {
|
|
49
64
|
const fileSizes = new Map;
|
|
50
65
|
const fileProgress = new Map;
|
|
51
66
|
const fileCompleted = new Set;
|
|
@@ -101,7 +116,17 @@ var doGetPipeline = async (model, onProgress, options, progressScaleMax, cacheKe
|
|
|
101
116
|
};
|
|
102
117
|
let hasSeenSubstantialFile = false;
|
|
103
118
|
const substantialFileThreshold = 1048576;
|
|
104
|
-
const abortSignal =
|
|
119
|
+
const abortSignal = signal;
|
|
120
|
+
const modelPath = model.provider_config.model_path;
|
|
121
|
+
const modelController = new AbortController;
|
|
122
|
+
modelAbortControllers.set(modelPath, modelController);
|
|
123
|
+
if (abortSignal) {
|
|
124
|
+
if (abortSignal.aborted) {
|
|
125
|
+
modelController.abort();
|
|
126
|
+
} else {
|
|
127
|
+
abortSignal.addEventListener("abort", () => modelController.abort(), { once: true });
|
|
128
|
+
}
|
|
129
|
+
}
|
|
105
130
|
const progressCallback = (status) => {
|
|
106
131
|
if (abortSignal?.aborted) {
|
|
107
132
|
return;
|
|
@@ -223,39 +248,29 @@ var doGetPipeline = async (model, onProgress, options, progressScaleMax, cacheKe
|
|
|
223
248
|
progress_callback: progressCallback
|
|
224
249
|
};
|
|
225
250
|
if (abortSignal?.aborted) {
|
|
251
|
+
modelAbortControllers.delete(modelPath);
|
|
226
252
|
throw new Error("Operation aborted before pipeline creation");
|
|
227
253
|
}
|
|
228
254
|
const pipelineType = model.provider_config.pipeline;
|
|
229
|
-
const abortPromise = new Promise((_, reject) => {
|
|
230
|
-
if (abortSignal) {
|
|
231
|
-
const handleAbort = () => {
|
|
232
|
-
reject(new Error("Pipeline download aborted"));
|
|
233
|
-
};
|
|
234
|
-
if (abortSignal.aborted) {
|
|
235
|
-
handleAbort();
|
|
236
|
-
} else {
|
|
237
|
-
abortSignal.addEventListener("abort", handleAbort, { once: true });
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
});
|
|
241
255
|
const { pipeline } = await loadTransformersSDK();
|
|
242
|
-
const pipelinePromise = pipeline(pipelineType, model.provider_config.model_path, pipelineOptions);
|
|
243
256
|
try {
|
|
244
|
-
const result = await (
|
|
257
|
+
const result = await pipeline(pipelineType, model.provider_config.model_path, pipelineOptions);
|
|
245
258
|
if (abortSignal?.aborted) {
|
|
246
259
|
throw new Error("Operation aborted after pipeline creation");
|
|
247
260
|
}
|
|
248
261
|
pipelines.set(cacheKey, result);
|
|
249
262
|
return result;
|
|
250
263
|
} catch (error) {
|
|
251
|
-
if (abortSignal?.aborted) {
|
|
264
|
+
if (abortSignal?.aborted || modelController.signal.aborted) {
|
|
252
265
|
throw new Error("Pipeline download aborted");
|
|
253
266
|
}
|
|
254
267
|
throw error;
|
|
268
|
+
} finally {
|
|
269
|
+
modelAbortControllers.delete(modelPath);
|
|
255
270
|
}
|
|
256
271
|
};
|
|
257
272
|
var HFT_Download = async (input, model, onProgress, signal) => {
|
|
258
|
-
await getPipeline(model, onProgress, {
|
|
273
|
+
await getPipeline(model, onProgress, {}, signal, 100);
|
|
259
274
|
return {
|
|
260
275
|
model: input.model
|
|
261
276
|
};
|
|
@@ -302,13 +317,10 @@ var deleteModelCache = async (model_path) => {
|
|
|
302
317
|
}
|
|
303
318
|
};
|
|
304
319
|
var HFT_TextEmbedding = async (input, model, onProgress, signal) => {
|
|
305
|
-
const generateEmbedding = await getPipeline(model, onProgress, {
|
|
306
|
-
abort_signal: signal
|
|
307
|
-
});
|
|
320
|
+
const generateEmbedding = await getPipeline(model, onProgress, {}, signal);
|
|
308
321
|
const hfVector = await generateEmbedding(input.text, {
|
|
309
322
|
pooling: model?.provider_config.pooling || "mean",
|
|
310
|
-
normalize: model?.provider_config.normalize
|
|
311
|
-
...signal ? { abort_signal: signal } : {}
|
|
323
|
+
normalize: model?.provider_config.normalize
|
|
312
324
|
});
|
|
313
325
|
const isArrayInput = Array.isArray(input.text);
|
|
314
326
|
const embeddingDim = model?.provider_config.native_dimensions;
|
|
@@ -334,9 +346,7 @@ var HFT_TextClassification = async (input, model, onProgress, signal) => {
|
|
|
334
346
|
if (!input.candidateLabels || !Array.isArray(input.candidateLabels) || input.candidateLabels.length === 0) {
|
|
335
347
|
throw new Error("Zero-shot text classification requires candidate labels");
|
|
336
348
|
}
|
|
337
|
-
const zeroShotClassifier = await getPipeline(model, onProgress, {
|
|
338
|
-
abort_signal: signal
|
|
339
|
-
});
|
|
349
|
+
const zeroShotClassifier = await getPipeline(model, onProgress, {}, signal);
|
|
340
350
|
const result2 = await zeroShotClassifier(input.text, input.candidateLabels, {});
|
|
341
351
|
return {
|
|
342
352
|
categories: result2.labels.map((label, idx) => ({
|
|
@@ -345,12 +355,9 @@ var HFT_TextClassification = async (input, model, onProgress, signal) => {
|
|
|
345
355
|
}))
|
|
346
356
|
};
|
|
347
357
|
}
|
|
348
|
-
const TextClassification = await getPipeline(model, onProgress, {
|
|
349
|
-
abort_signal: signal
|
|
350
|
-
});
|
|
358
|
+
const TextClassification = await getPipeline(model, onProgress, {}, signal);
|
|
351
359
|
const result = await TextClassification(input.text, {
|
|
352
|
-
top_k: input.maxCategories || undefined
|
|
353
|
-
...signal ? { abort_signal: signal } : {}
|
|
360
|
+
top_k: input.maxCategories || undefined
|
|
354
361
|
});
|
|
355
362
|
if (Array.isArray(result[0])) {
|
|
356
363
|
return {
|
|
@@ -368,12 +375,9 @@ var HFT_TextClassification = async (input, model, onProgress, signal) => {
|
|
|
368
375
|
};
|
|
369
376
|
};
|
|
370
377
|
var HFT_TextLanguageDetection = async (input, model, onProgress, signal) => {
|
|
371
|
-
const TextClassification = await getPipeline(model, onProgress, {
|
|
372
|
-
abort_signal: signal
|
|
373
|
-
});
|
|
378
|
+
const TextClassification = await getPipeline(model, onProgress, {}, signal);
|
|
374
379
|
const result = await TextClassification(input.text, {
|
|
375
|
-
top_k: input.maxLanguages || undefined
|
|
376
|
-
...signal ? { abort_signal: signal } : {}
|
|
380
|
+
top_k: input.maxLanguages || undefined
|
|
377
381
|
});
|
|
378
382
|
if (Array.isArray(result[0])) {
|
|
379
383
|
return {
|
|
@@ -391,12 +395,9 @@ var HFT_TextLanguageDetection = async (input, model, onProgress, signal) => {
|
|
|
391
395
|
};
|
|
392
396
|
};
|
|
393
397
|
var HFT_TextNamedEntityRecognition = async (input, model, onProgress, signal) => {
|
|
394
|
-
const textNamedEntityRecognition = await getPipeline(model, onProgress, {
|
|
395
|
-
abort_signal: signal
|
|
396
|
-
});
|
|
398
|
+
const textNamedEntityRecognition = await getPipeline(model, onProgress, {}, signal);
|
|
397
399
|
let results = await textNamedEntityRecognition(input.text, {
|
|
398
|
-
ignore_labels: input.blockList
|
|
399
|
-
...signal ? { abort_signal: signal } : {}
|
|
400
|
+
ignore_labels: input.blockList
|
|
400
401
|
});
|
|
401
402
|
let entities = [];
|
|
402
403
|
if (!Array.isArray(results)) {
|
|
@@ -413,9 +414,7 @@ var HFT_TextNamedEntityRecognition = async (input, model, onProgress, signal) =>
|
|
|
413
414
|
};
|
|
414
415
|
};
|
|
415
416
|
var HFT_TextFillMask = async (input, model, onProgress, signal) => {
|
|
416
|
-
const unmasker = await getPipeline(model, onProgress, {
|
|
417
|
-
abort_signal: signal
|
|
418
|
-
});
|
|
417
|
+
const unmasker = await getPipeline(model, onProgress, {}, signal);
|
|
419
418
|
let results = await unmasker(input.text);
|
|
420
419
|
let predictions = [];
|
|
421
420
|
if (!Array.isArray(results)) {
|
|
@@ -432,13 +431,10 @@ var HFT_TextFillMask = async (input, model, onProgress, signal) => {
|
|
|
432
431
|
};
|
|
433
432
|
};
|
|
434
433
|
var HFT_TextGeneration = async (input, model, onProgress, signal) => {
|
|
435
|
-
const generateText = await getPipeline(model, onProgress, {
|
|
436
|
-
|
|
437
|
-
});
|
|
438
|
-
const streamer = createTextStreamer(generateText.tokenizer, onProgress, signal);
|
|
434
|
+
const generateText = await getPipeline(model, onProgress, {}, signal);
|
|
435
|
+
const streamer = createTextStreamer(generateText.tokenizer, onProgress);
|
|
439
436
|
let results = await generateText(input.prompt, {
|
|
440
|
-
streamer
|
|
441
|
-
...signal ? { abort_signal: signal } : {}
|
|
437
|
+
streamer
|
|
442
438
|
});
|
|
443
439
|
if (!Array.isArray(results)) {
|
|
444
440
|
results = [results];
|
|
@@ -452,15 +448,12 @@ var HFT_TextGeneration = async (input, model, onProgress, signal) => {
|
|
|
452
448
|
};
|
|
453
449
|
};
|
|
454
450
|
var HFT_TextTranslation = async (input, model, onProgress, signal) => {
|
|
455
|
-
const translate = await getPipeline(model, onProgress, {
|
|
456
|
-
abort_signal: signal
|
|
457
|
-
});
|
|
451
|
+
const translate = await getPipeline(model, onProgress, {}, signal);
|
|
458
452
|
const streamer = createTextStreamer(translate.tokenizer, onProgress);
|
|
459
453
|
const result = await translate(input.text, {
|
|
460
454
|
src_lang: input.source_lang,
|
|
461
455
|
tgt_lang: input.target_lang,
|
|
462
|
-
streamer
|
|
463
|
-
...signal ? { abort_signal: signal } : {}
|
|
456
|
+
streamer
|
|
464
457
|
});
|
|
465
458
|
const translatedText = Array.isArray(result) ? result[0]?.translation_text || "" : result?.translation_text || "";
|
|
466
459
|
return {
|
|
@@ -469,15 +462,12 @@ var HFT_TextTranslation = async (input, model, onProgress, signal) => {
|
|
|
469
462
|
};
|
|
470
463
|
};
|
|
471
464
|
var HFT_TextRewriter = async (input, model, onProgress, signal) => {
|
|
472
|
-
const generateText = await getPipeline(model, onProgress, {
|
|
473
|
-
abort_signal: signal
|
|
474
|
-
});
|
|
465
|
+
const generateText = await getPipeline(model, onProgress, {}, signal);
|
|
475
466
|
const streamer = createTextStreamer(generateText.tokenizer, onProgress);
|
|
476
467
|
const promptedText = (input.prompt ? input.prompt + `
|
|
477
468
|
` : "") + input.text;
|
|
478
469
|
let results = await generateText(promptedText, {
|
|
479
|
-
streamer
|
|
480
|
-
...signal ? { abort_signal: signal } : {}
|
|
470
|
+
streamer
|
|
481
471
|
});
|
|
482
472
|
if (!Array.isArray(results)) {
|
|
483
473
|
results = [results];
|
|
@@ -494,13 +484,10 @@ var HFT_TextRewriter = async (input, model, onProgress, signal) => {
|
|
|
494
484
|
};
|
|
495
485
|
};
|
|
496
486
|
var HFT_TextSummary = async (input, model, onProgress, signal) => {
|
|
497
|
-
const generateSummary = await getPipeline(model, onProgress, {
|
|
498
|
-
abort_signal: signal
|
|
499
|
-
});
|
|
487
|
+
const generateSummary = await getPipeline(model, onProgress, {}, signal);
|
|
500
488
|
const streamer = createTextStreamer(generateSummary.tokenizer, onProgress);
|
|
501
489
|
let result = await generateSummary(input.text, {
|
|
502
|
-
streamer
|
|
503
|
-
...signal ? { abort_signal: signal } : {}
|
|
490
|
+
streamer
|
|
504
491
|
});
|
|
505
492
|
let summaryText = "";
|
|
506
493
|
if (Array.isArray(result)) {
|
|
@@ -513,13 +500,10 @@ var HFT_TextSummary = async (input, model, onProgress, signal) => {
|
|
|
513
500
|
};
|
|
514
501
|
};
|
|
515
502
|
var HFT_TextQuestionAnswer = async (input, model, onProgress, signal) => {
|
|
516
|
-
const generateAnswer = await getPipeline(model, onProgress, {
|
|
517
|
-
abort_signal: signal
|
|
518
|
-
});
|
|
503
|
+
const generateAnswer = await getPipeline(model, onProgress, {}, signal);
|
|
519
504
|
const streamer = createTextStreamer(generateAnswer.tokenizer, onProgress);
|
|
520
505
|
const result = await generateAnswer(input.question, input.context, {
|
|
521
|
-
streamer
|
|
522
|
-
...signal ? { abort_signal: signal } : {}
|
|
506
|
+
streamer
|
|
523
507
|
});
|
|
524
508
|
let answerText = "";
|
|
525
509
|
if (Array.isArray(result)) {
|
|
@@ -532,13 +516,10 @@ var HFT_TextQuestionAnswer = async (input, model, onProgress, signal) => {
|
|
|
532
516
|
};
|
|
533
517
|
};
|
|
534
518
|
var HFT_ImageSegmentation = async (input, model, onProgress, signal) => {
|
|
535
|
-
const segmenter = await getPipeline(model, onProgress, {
|
|
536
|
-
abort_signal: signal
|
|
537
|
-
});
|
|
519
|
+
const segmenter = await getPipeline(model, onProgress, {}, signal);
|
|
538
520
|
const result = await segmenter(input.image, {
|
|
539
521
|
threshold: input.threshold,
|
|
540
|
-
mask_threshold: input.maskThreshold
|
|
541
|
-
...signal ? { abort_signal: signal } : {}
|
|
522
|
+
mask_threshold: input.maskThreshold
|
|
542
523
|
});
|
|
543
524
|
const masks = Array.isArray(result) ? result : [result];
|
|
544
525
|
const processedMasks = await Promise.all(masks.map(async (mask) => ({
|
|
@@ -551,12 +532,9 @@ var HFT_ImageSegmentation = async (input, model, onProgress, signal) => {
|
|
|
551
532
|
};
|
|
552
533
|
};
|
|
553
534
|
var HFT_ImageToText = async (input, model, onProgress, signal) => {
|
|
554
|
-
const captioner = await getPipeline(model, onProgress, {
|
|
555
|
-
abort_signal: signal
|
|
556
|
-
});
|
|
535
|
+
const captioner = await getPipeline(model, onProgress, {}, signal);
|
|
557
536
|
const result = await captioner(input.image, {
|
|
558
|
-
max_new_tokens: input.maxTokens
|
|
559
|
-
...signal ? { abort_signal: signal } : {}
|
|
537
|
+
max_new_tokens: input.maxTokens
|
|
560
538
|
});
|
|
561
539
|
const text = Array.isArray(result) ? result[0]?.generated_text : result?.generated_text;
|
|
562
540
|
return {
|
|
@@ -564,21 +542,15 @@ var HFT_ImageToText = async (input, model, onProgress, signal) => {
|
|
|
564
542
|
};
|
|
565
543
|
};
|
|
566
544
|
var HFT_BackgroundRemoval = async (input, model, onProgress, signal) => {
|
|
567
|
-
const remover = await getPipeline(model, onProgress, {
|
|
568
|
-
|
|
569
|
-
});
|
|
570
|
-
const result = await remover(input.image, {
|
|
571
|
-
...signal ? { abort_signal: signal } : {}
|
|
572
|
-
});
|
|
545
|
+
const remover = await getPipeline(model, onProgress, {}, signal);
|
|
546
|
+
const result = await remover(input.image);
|
|
573
547
|
const resultImage = Array.isArray(result) ? result[0] : result;
|
|
574
548
|
return {
|
|
575
549
|
image: imageToBase64(resultImage)
|
|
576
550
|
};
|
|
577
551
|
};
|
|
578
552
|
var HFT_ImageEmbedding = async (input, model, onProgress, signal) => {
|
|
579
|
-
const embedder = await getPipeline(model, onProgress, {
|
|
580
|
-
abort_signal: signal
|
|
581
|
-
});
|
|
553
|
+
const embedder = await getPipeline(model, onProgress, {}, signal);
|
|
582
554
|
const result = await embedder(input.image);
|
|
583
555
|
return {
|
|
584
556
|
vector: result.data
|
|
@@ -590,9 +562,7 @@ var HFT_ImageClassification = async (input, model, onProgress, signal) => {
|
|
|
590
562
|
console.warn("Zero-shot image classification requires categories", input);
|
|
591
563
|
throw new Error("Zero-shot image classification requires categories");
|
|
592
564
|
}
|
|
593
|
-
const zeroShotClassifier = await getPipeline(model, onProgress, {
|
|
594
|
-
abort_signal: signal
|
|
595
|
-
});
|
|
565
|
+
const zeroShotClassifier = await getPipeline(model, onProgress, {}, signal);
|
|
596
566
|
const result2 = await zeroShotClassifier(input.image, input.categories, {});
|
|
597
567
|
const results2 = Array.isArray(result2) ? result2 : [result2];
|
|
598
568
|
return {
|
|
@@ -602,12 +572,9 @@ var HFT_ImageClassification = async (input, model, onProgress, signal) => {
|
|
|
602
572
|
}))
|
|
603
573
|
};
|
|
604
574
|
}
|
|
605
|
-
const classifier = await getPipeline(model, onProgress, {
|
|
606
|
-
abort_signal: signal
|
|
607
|
-
});
|
|
575
|
+
const classifier = await getPipeline(model, onProgress, {}, signal);
|
|
608
576
|
const result = await classifier(input.image, {
|
|
609
|
-
top_k: input.maxCategories
|
|
610
|
-
...signal ? { abort_signal: signal } : {}
|
|
577
|
+
top_k: input.maxCategories
|
|
611
578
|
});
|
|
612
579
|
const results = Array.isArray(result) ? result : [result];
|
|
613
580
|
return {
|
|
@@ -622,9 +589,7 @@ var HFT_ObjectDetection = async (input, model, onProgress, signal) => {
|
|
|
622
589
|
if (!input.labels || !Array.isArray(input.labels) || input.labels.length === 0) {
|
|
623
590
|
throw new Error("Zero-shot object detection requires labels");
|
|
624
591
|
}
|
|
625
|
-
const zeroShotDetector = await getPipeline(model, onProgress, {
|
|
626
|
-
abort_signal: signal
|
|
627
|
-
});
|
|
592
|
+
const zeroShotDetector = await getPipeline(model, onProgress, {}, signal);
|
|
628
593
|
const result2 = await zeroShotDetector(input.image, Array.from(input.labels), {
|
|
629
594
|
threshold: input.threshold
|
|
630
595
|
});
|
|
@@ -637,12 +602,9 @@ var HFT_ObjectDetection = async (input, model, onProgress, signal) => {
|
|
|
637
602
|
}))
|
|
638
603
|
};
|
|
639
604
|
}
|
|
640
|
-
const detector = await getPipeline(model, onProgress, {
|
|
641
|
-
abort_signal: signal
|
|
642
|
-
});
|
|
605
|
+
const detector = await getPipeline(model, onProgress, {}, signal);
|
|
643
606
|
const result = await detector(input.image, {
|
|
644
|
-
threshold: input.threshold
|
|
645
|
-
...signal ? { abort_signal: signal } : {}
|
|
607
|
+
threshold: input.threshold
|
|
646
608
|
});
|
|
647
609
|
const detections = Array.isArray(result) ? result : [result];
|
|
648
610
|
return {
|
|
@@ -656,7 +618,7 @@ var HFT_ObjectDetection = async (input, model, onProgress, signal) => {
|
|
|
656
618
|
function imageToBase64(image) {
|
|
657
619
|
return image.toBase64?.() || "";
|
|
658
620
|
}
|
|
659
|
-
function createTextStreamer(tokenizer, updateProgress
|
|
621
|
+
function createTextStreamer(tokenizer, updateProgress) {
|
|
660
622
|
const { TextStreamer } = _transformersSdk;
|
|
661
623
|
let count = 0;
|
|
662
624
|
return new TextStreamer(tokenizer, {
|
|
@@ -667,8 +629,7 @@ function createTextStreamer(tokenizer, updateProgress, signal) {
|
|
|
667
629
|
const result = 100 * (1 - Math.exp(-0.05 * count));
|
|
668
630
|
const progress = Math.round(Math.min(result, 100));
|
|
669
631
|
updateProgress(progress, "Generating", { text, progress });
|
|
670
|
-
}
|
|
671
|
-
...signal ? { abort_signal: signal } : {}
|
|
632
|
+
}
|
|
672
633
|
});
|
|
673
634
|
}
|
|
674
635
|
function createStreamEventQueue() {
|
|
@@ -722,27 +683,23 @@ function createStreamEventQueue() {
|
|
|
722
683
|
};
|
|
723
684
|
return { push, done, error, iterable };
|
|
724
685
|
}
|
|
725
|
-
function createStreamingTextStreamer(tokenizer, queue
|
|
686
|
+
function createStreamingTextStreamer(tokenizer, queue) {
|
|
726
687
|
const { TextStreamer } = _transformersSdk;
|
|
727
688
|
return new TextStreamer(tokenizer, {
|
|
728
689
|
skip_prompt: true,
|
|
729
690
|
decode_kwargs: { skip_special_tokens: true },
|
|
730
691
|
callback_function: (text) => {
|
|
731
692
|
queue.push({ type: "text-delta", port: "text", textDelta: text });
|
|
732
|
-
}
|
|
733
|
-
...signal ? { abort_signal: signal } : {}
|
|
693
|
+
}
|
|
734
694
|
});
|
|
735
695
|
}
|
|
736
696
|
var HFT_TextGeneration_Stream = async function* (input, model, signal) {
|
|
737
697
|
const noopProgress = () => {};
|
|
738
|
-
const generateText = await getPipeline(model, noopProgress, {
|
|
739
|
-
abort_signal: signal
|
|
740
|
-
});
|
|
698
|
+
const generateText = await getPipeline(model, noopProgress, {}, signal);
|
|
741
699
|
const queue = createStreamEventQueue();
|
|
742
|
-
const streamer = createStreamingTextStreamer(generateText.tokenizer, queue
|
|
700
|
+
const streamer = createStreamingTextStreamer(generateText.tokenizer, queue);
|
|
743
701
|
const pipelinePromise = generateText(input.prompt, {
|
|
744
|
-
streamer
|
|
745
|
-
...signal ? { abort_signal: signal } : {}
|
|
702
|
+
streamer
|
|
746
703
|
}).then(() => queue.done(), (err) => queue.error(err));
|
|
747
704
|
yield* queue.iterable;
|
|
748
705
|
await pipelinePromise;
|
|
@@ -750,16 +707,13 @@ var HFT_TextGeneration_Stream = async function* (input, model, signal) {
|
|
|
750
707
|
};
|
|
751
708
|
var HFT_TextRewriter_Stream = async function* (input, model, signal) {
|
|
752
709
|
const noopProgress = () => {};
|
|
753
|
-
const generateText = await getPipeline(model, noopProgress, {
|
|
754
|
-
abort_signal: signal
|
|
755
|
-
});
|
|
710
|
+
const generateText = await getPipeline(model, noopProgress, {}, signal);
|
|
756
711
|
const queue = createStreamEventQueue();
|
|
757
712
|
const streamer = createStreamingTextStreamer(generateText.tokenizer, queue);
|
|
758
713
|
const promptedText = (input.prompt ? input.prompt + `
|
|
759
714
|
` : "") + input.text;
|
|
760
715
|
const pipelinePromise = generateText(promptedText, {
|
|
761
|
-
streamer
|
|
762
|
-
...signal ? { abort_signal: signal } : {}
|
|
716
|
+
streamer
|
|
763
717
|
}).then(() => queue.done(), (err) => queue.error(err));
|
|
764
718
|
yield* queue.iterable;
|
|
765
719
|
await pipelinePromise;
|
|
@@ -767,14 +721,11 @@ var HFT_TextRewriter_Stream = async function* (input, model, signal) {
|
|
|
767
721
|
};
|
|
768
722
|
var HFT_TextSummary_Stream = async function* (input, model, signal) {
|
|
769
723
|
const noopProgress = () => {};
|
|
770
|
-
const generateSummary = await getPipeline(model, noopProgress, {
|
|
771
|
-
abort_signal: signal
|
|
772
|
-
});
|
|
724
|
+
const generateSummary = await getPipeline(model, noopProgress, {}, signal);
|
|
773
725
|
const queue = createStreamEventQueue();
|
|
774
726
|
const streamer = createStreamingTextStreamer(generateSummary.tokenizer, queue);
|
|
775
727
|
const pipelinePromise = generateSummary(input.text, {
|
|
776
|
-
streamer
|
|
777
|
-
...signal ? { abort_signal: signal } : {}
|
|
728
|
+
streamer
|
|
778
729
|
}).then(() => queue.done(), (err) => queue.error(err));
|
|
779
730
|
yield* queue.iterable;
|
|
780
731
|
await pipelinePromise;
|
|
@@ -782,15 +733,12 @@ var HFT_TextSummary_Stream = async function* (input, model, signal) {
|
|
|
782
733
|
};
|
|
783
734
|
var HFT_TextQuestionAnswer_Stream = async function* (input, model, signal) {
|
|
784
735
|
const noopProgress = () => {};
|
|
785
|
-
const generateAnswer = await getPipeline(model, noopProgress, {
|
|
786
|
-
abort_signal: signal
|
|
787
|
-
});
|
|
736
|
+
const generateAnswer = await getPipeline(model, noopProgress, {}, signal);
|
|
788
737
|
const queue = createStreamEventQueue();
|
|
789
738
|
const streamer = createStreamingTextStreamer(generateAnswer.tokenizer, queue);
|
|
790
739
|
let pipelineResult;
|
|
791
740
|
const pipelinePromise = generateAnswer(input.question, input.context, {
|
|
792
|
-
streamer
|
|
793
|
-
...signal ? { abort_signal: signal } : {}
|
|
741
|
+
streamer
|
|
794
742
|
}).then((result) => {
|
|
795
743
|
pipelineResult = result;
|
|
796
744
|
queue.done();
|
|
@@ -809,24 +757,33 @@ var HFT_TextQuestionAnswer_Stream = async function* (input, model, signal) {
|
|
|
809
757
|
};
|
|
810
758
|
var HFT_TextTranslation_Stream = async function* (input, model, signal) {
|
|
811
759
|
const noopProgress = () => {};
|
|
812
|
-
const translate = await getPipeline(model, noopProgress, {
|
|
813
|
-
abort_signal: signal
|
|
814
|
-
});
|
|
760
|
+
const translate = await getPipeline(model, noopProgress, {}, signal);
|
|
815
761
|
const queue = createStreamEventQueue();
|
|
816
762
|
const streamer = createStreamingTextStreamer(translate.tokenizer, queue);
|
|
817
763
|
const pipelinePromise = translate(input.text, {
|
|
818
764
|
src_lang: input.source_lang,
|
|
819
765
|
tgt_lang: input.target_lang,
|
|
820
|
-
streamer
|
|
821
|
-
...signal ? { abort_signal: signal } : {}
|
|
766
|
+
streamer
|
|
822
767
|
}).then(() => queue.done(), (err) => queue.error(err));
|
|
823
768
|
yield* queue.iterable;
|
|
824
769
|
await pipelinePromise;
|
|
825
770
|
yield { type: "finish", data: { target_lang: input.target_lang } };
|
|
826
771
|
};
|
|
772
|
+
var HFT_CountTokens = async (input, model, onProgress, signal) => {
|
|
773
|
+
const { AutoTokenizer } = _transformersSdk;
|
|
774
|
+
const tokenizer = await AutoTokenizer.from_pretrained(model.provider_config.model_path, {
|
|
775
|
+
progress_callback: (progress) => onProgress(progress?.progress ?? 0)
|
|
776
|
+
});
|
|
777
|
+
const tokenIds = tokenizer.encode(input.text);
|
|
778
|
+
return { count: tokenIds.length };
|
|
779
|
+
};
|
|
780
|
+
var HFT_CountTokens_Reactive = async (input, _output, model) => {
|
|
781
|
+
return HFT_CountTokens(input, model, () => {}, new AbortController().signal);
|
|
782
|
+
};
|
|
827
783
|
var HFT_TASKS = {
|
|
828
784
|
DownloadModelTask: HFT_Download,
|
|
829
785
|
UnloadModelTask: HFT_Unload,
|
|
786
|
+
CountTokensTask: HFT_CountTokens,
|
|
830
787
|
TextEmbeddingTask: HFT_TextEmbedding,
|
|
831
788
|
TextGenerationTask: HFT_TextGeneration,
|
|
832
789
|
TextQuestionAnswerTask: HFT_TextQuestionAnswer,
|
|
@@ -851,7 +808,10 @@ var HFT_STREAM_TASKS = {
|
|
|
851
808
|
TextQuestionAnswerTask: HFT_TextQuestionAnswer_Stream,
|
|
852
809
|
TextTranslationTask: HFT_TextTranslation_Stream
|
|
853
810
|
};
|
|
811
|
+
var HFT_REACTIVE_TASKS = {
|
|
812
|
+
CountTokensTask: HFT_CountTokens_Reactive
|
|
813
|
+
};
|
|
854
814
|
|
|
855
|
-
export { clearPipelineCache, HFT_Download, HFT_Unload, HFT_TextEmbedding, HFT_TextClassification, HFT_TextLanguageDetection, HFT_TextNamedEntityRecognition, HFT_TextFillMask, HFT_TextGeneration, HFT_TextTranslation, HFT_TextRewriter, HFT_TextSummary, HFT_TextQuestionAnswer, HFT_ImageSegmentation, HFT_ImageToText, HFT_BackgroundRemoval, HFT_ImageEmbedding, HFT_ImageClassification, HFT_ObjectDetection, HFT_TextGeneration_Stream, HFT_TextRewriter_Stream, HFT_TextSummary_Stream, HFT_TextQuestionAnswer_Stream, HFT_TextTranslation_Stream, HFT_TASKS, HFT_STREAM_TASKS };
|
|
815
|
+
export { clearPipelineCache, HFT_Download, HFT_Unload, HFT_TextEmbedding, HFT_TextClassification, HFT_TextLanguageDetection, HFT_TextNamedEntityRecognition, HFT_TextFillMask, HFT_TextGeneration, HFT_TextTranslation, HFT_TextRewriter, HFT_TextSummary, HFT_TextQuestionAnswer, HFT_ImageSegmentation, HFT_ImageToText, HFT_BackgroundRemoval, HFT_ImageEmbedding, HFT_ImageClassification, HFT_ObjectDetection, HFT_TextGeneration_Stream, HFT_TextRewriter_Stream, HFT_TextSummary_Stream, HFT_TextQuestionAnswer_Stream, HFT_TextTranslation_Stream, HFT_CountTokens, HFT_CountTokens_Reactive, HFT_TASKS, HFT_STREAM_TASKS, HFT_REACTIVE_TASKS };
|
|
856
816
|
|
|
857
|
-
//# debugId=
|
|
817
|
+
//# debugId=F936CC38CCBF1A8B64756E2164756E21
|