@workglow/ai-provider 0.0.99 → 0.0.101

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 (69) hide show
  1. package/dist/{HFT_JobRunFns-ajak33q5.js → HFT_JobRunFns-aap9x58c.js} +8 -2
  2. package/dist/{HFT_JobRunFns-ajak33q5.js.map → HFT_JobRunFns-aap9x58c.js.map} +1 -1
  3. package/dist/anthropic/AnthropicProvider.d.ts +4 -4
  4. package/dist/anthropic/AnthropicProvider.d.ts.map +1 -1
  5. package/dist/anthropic/Anthropic_Worker.d.ts.map +1 -1
  6. package/dist/anthropic/common/Anthropic_JobRunFns.d.ts +4 -1
  7. package/dist/anthropic/common/Anthropic_JobRunFns.d.ts.map +1 -1
  8. package/dist/anthropic/index.js +21 -3
  9. package/dist/anthropic/index.js.map +4 -4
  10. package/dist/google-gemini/Gemini_Worker.d.ts.map +1 -1
  11. package/dist/google-gemini/GoogleGeminiProvider.d.ts +3 -3
  12. package/dist/google-gemini/GoogleGeminiProvider.d.ts.map +1 -1
  13. package/dist/google-gemini/common/Gemini_JobRunFns.d.ts +4 -1
  14. package/dist/google-gemini/common/Gemini_JobRunFns.d.ts.map +1 -1
  15. package/dist/google-gemini/index.js +21 -4
  16. package/dist/google-gemini/index.js.map +4 -4
  17. package/dist/hf-transformers/HFT_Worker.d.ts.map +1 -1
  18. package/dist/hf-transformers/HuggingFaceTransformersProvider.d.ts +3 -3
  19. package/dist/hf-transformers/HuggingFaceTransformersProvider.d.ts.map +1 -1
  20. package/dist/hf-transformers/common/HFT_JobRunFns.d.ts +61 -1
  21. package/dist/hf-transformers/common/HFT_JobRunFns.d.ts.map +1 -1
  22. package/dist/hf-transformers/index.js +10 -4
  23. package/dist/hf-transformers/index.js.map +3 -3
  24. package/dist/{index-kctzvn3c.js → index-236gqvq1.js} +12 -5
  25. package/dist/{index-kctzvn3c.js.map → index-236gqvq1.js.map} +3 -3
  26. package/dist/{index-9w5hs4zc.js → index-3tvpdt0s.js} +6 -4
  27. package/dist/{index-9w5hs4zc.js.map → index-3tvpdt0s.js.map} +3 -3
  28. package/dist/{index-2pvfsjyx.js → index-8jqhbz1h.js} +101 -141
  29. package/dist/index-8jqhbz1h.js.map +10 -0
  30. package/dist/{index-rmbnv0rw.js → index-b9310x5k.js} +5 -4
  31. package/dist/{index-rmbnv0rw.js.map → index-b9310x5k.js.map} +3 -3
  32. package/dist/{index-xyavfrb8.js → index-cfd8ne0j.js} +7 -4
  33. package/dist/{index-xyavfrb8.js.map → index-cfd8ne0j.js.map} +3 -3
  34. package/dist/{index-34rcjm0y.js → index-fgp2zg78.js} +8 -5
  35. package/dist/{index-34rcjm0y.js.map → index-fgp2zg78.js.map} +3 -3
  36. package/dist/{index-wnmajxg6.js → index-h5kwbbzq.js} +7 -4
  37. package/dist/{index-wnmajxg6.js.map → index-h5kwbbzq.js.map} +3 -3
  38. package/dist/{index-tn88s0ke.js → index-w496eeda.js} +6 -4
  39. package/dist/{index-tn88s0ke.js.map → index-w496eeda.js.map} +3 -3
  40. package/dist/index.js +10 -10
  41. package/dist/index.js.map +3 -3
  42. package/dist/provider-hf-inference/HfInferenceProvider.d.ts +2 -2
  43. package/dist/provider-hf-inference/HfInferenceProvider.d.ts.map +1 -1
  44. package/dist/provider-hf-inference/index.js +1 -1
  45. package/dist/provider-llamacpp/LlamaCppProvider.d.ts +3 -3
  46. package/dist/provider-llamacpp/LlamaCppProvider.d.ts.map +1 -1
  47. package/dist/provider-llamacpp/LlamaCpp_Worker.d.ts.map +1 -1
  48. package/dist/provider-llamacpp/common/LlamaCpp_JobRunFns.d.ts +4 -1
  49. package/dist/provider-llamacpp/common/LlamaCpp_JobRunFns.d.ts.map +1 -1
  50. package/dist/provider-llamacpp/index.js +18 -3
  51. package/dist/provider-llamacpp/index.js.map +4 -4
  52. package/dist/provider-ollama/OllamaProvider.d.ts +2 -2
  53. package/dist/provider-ollama/OllamaProvider.d.ts.map +1 -1
  54. package/dist/provider-ollama/index.browser.js +6 -4
  55. package/dist/provider-ollama/index.browser.js.map +3 -3
  56. package/dist/provider-ollama/index.js +1 -1
  57. package/dist/provider-openai/OpenAI_Worker.d.ts.map +1 -1
  58. package/dist/provider-openai/OpenAiProvider.d.ts +3 -3
  59. package/dist/provider-openai/OpenAiProvider.d.ts.map +1 -1
  60. package/dist/provider-openai/common/OpenAI_JobRunFns.d.ts +10 -1
  61. package/dist/provider-openai/common/OpenAI_JobRunFns.d.ts.map +1 -1
  62. package/dist/provider-openai/index.js +51 -4
  63. package/dist/provider-openai/index.js.map +4 -4
  64. package/dist/tf-mediapipe/TensorFlowMediaPipeProvider.d.ts +2 -2
  65. package/dist/tf-mediapipe/TensorFlowMediaPipeProvider.d.ts.map +1 -1
  66. package/dist/tf-mediapipe/index.js +3 -3
  67. package/dist/tf-mediapipe/index.js.map +3 -3
  68. package/package.json +19 -14
  69. 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 = options.abort_signal;
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 (abortSignal ? Promise.race([pipelinePromise, abortPromise]) : pipelinePromise);
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, { abort_signal: signal }, 100);
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
- abort_signal: signal
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
- abort_signal: signal
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, signal) {
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, signal) {
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, signal);
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=4AF2ECA21E0D4F3464756E2164756E21
817
+ //# debugId=F936CC38CCBF1A8B64756E2164756E21