@workglow/tf-mediapipe 0.2.34 → 0.2.35

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 (42) hide show
  1. package/dist/ai/TensorFlowMediaPipeProvider.d.ts +8 -10
  2. package/dist/ai/TensorFlowMediaPipeProvider.d.ts.map +1 -1
  3. package/dist/ai/TensorFlowMediaPipeQueuedProvider.d.ts +6 -3
  4. package/dist/ai/TensorFlowMediaPipeQueuedProvider.d.ts.map +1 -1
  5. package/dist/ai/common/TFMP_Capabilities.d.ts +24 -0
  6. package/dist/ai/common/TFMP_Capabilities.d.ts.map +1 -0
  7. package/dist/ai/common/TFMP_CapabilitySets.d.ts +23 -0
  8. package/dist/ai/common/TFMP_CapabilitySets.d.ts.map +1 -0
  9. package/dist/ai/common/TFMP_Constants.d.ts +1 -1
  10. package/dist/ai/common/TFMP_Constants.d.ts.map +1 -1
  11. package/dist/ai/common/TFMP_Download.d.ts +14 -2
  12. package/dist/ai/common/TFMP_Download.d.ts.map +1 -1
  13. package/dist/ai/common/TFMP_FaceDetector.d.ts.map +1 -1
  14. package/dist/ai/common/TFMP_FaceLandmarker.d.ts.map +1 -1
  15. package/dist/ai/common/TFMP_GestureRecognizer.d.ts.map +1 -1
  16. package/dist/ai/common/TFMP_HandLandmarker.d.ts.map +1 -1
  17. package/dist/ai/common/TFMP_ImageClassification.d.ts.map +1 -1
  18. package/dist/ai/common/TFMP_ImageEmbedding.d.ts.map +1 -1
  19. package/dist/ai/common/TFMP_ImageSegmentation.d.ts.map +1 -1
  20. package/dist/ai/common/TFMP_JobRunFns.d.ts +9 -2
  21. package/dist/ai/common/TFMP_JobRunFns.d.ts.map +1 -1
  22. package/dist/ai/common/TFMP_ModelInfo.d.ts.map +1 -1
  23. package/dist/ai/common/TFMP_ModelSchema.d.ts +3 -3
  24. package/dist/ai/common/TFMP_ObjectDetection.d.ts.map +1 -1
  25. package/dist/ai/common/TFMP_PoseLandmarker.d.ts.map +1 -1
  26. package/dist/ai/common/TFMP_Runtime.d.ts +2 -1
  27. package/dist/ai/common/TFMP_Runtime.d.ts.map +1 -1
  28. package/dist/ai/common/TFMP_TextClassification.d.ts.map +1 -1
  29. package/dist/ai/common/TFMP_TextEmbedding.d.ts.map +1 -1
  30. package/dist/ai/common/TFMP_TextLanguageDetection.d.ts.map +1 -1
  31. package/dist/ai/common/TFMP_Unload.d.ts +2 -2
  32. package/dist/ai/common/TFMP_Unload.d.ts.map +1 -1
  33. package/dist/ai/index.d.ts +25 -0
  34. package/dist/ai/index.d.ts.map +1 -1
  35. package/dist/ai/runtime.d.ts.map +1 -1
  36. package/dist/ai-runtime.d.ts.map +1 -1
  37. package/dist/ai-runtime.js +482 -395
  38. package/dist/ai-runtime.js.map +28 -26
  39. package/dist/ai.d.ts.map +1 -1
  40. package/dist/ai.js +735 -22
  41. package/dist/ai.js.map +27 -6
  42. package/package.json +12 -13
@@ -1,33 +1,35 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/ai/common/TFMP_Client.ts", "../src/ai/registerTensorFlowMediaPipeInline.ts", "../src/ai/common/TFMP_ModelSearch.ts", "../src/ai/common/TFMP_Constants.ts", "../src/ai/common/TFMP_Download.ts", "../src/ai/common/TFMP_Runtime.ts", "../src/ai/common/TFMP_FaceDetector.ts", "../src/ai/common/TFMP_FaceLandmarker.ts", "../src/ai/common/TFMP_GestureRecognizer.ts", "../src/ai/common/TFMP_HandLandmarker.ts", "../src/ai/common/TFMP_ImageClassification.ts", "../src/ai/common/TFMP_ImageEmbedding.ts", "../src/ai/common/TFMP_ImageSegmentation.ts", "../src/ai/common/TFMP_ModelInfo.ts", "../src/ai/common/TFMP_ObjectDetection.ts", "../src/ai/common/TFMP_PoseLandmarker.ts", "../src/ai/common/TFMP_TextClassification.ts", "../src/ai/common/TFMP_TextEmbedding.ts", "../src/ai/common/TFMP_TextLanguageDetection.ts", "../src/ai/common/TFMP_Unload.ts", "../src/ai/common/TFMP_JobRunFns.ts", "../src/ai/TensorFlowMediaPipeQueuedProvider.ts", "../src/ai/registerTensorFlowMediaPipeWorker.ts", "../src/ai/TensorFlowMediaPipeProvider.ts"],
3
+ "sources": ["../src/ai/common/TFMP_Client.ts", "../src/ai/registerTensorFlowMediaPipeInline.ts", "../src/ai/common/TFMP_CapabilitySets.ts", "../src/ai/common/TFMP_Download.ts", "../src/ai/common/TFMP_Runtime.ts", "../src/ai/common/TFMP_FaceDetector.ts", "../src/ai/common/TFMP_FaceLandmarker.ts", "../src/ai/common/TFMP_GestureRecognizer.ts", "../src/ai/common/TFMP_HandLandmarker.ts", "../src/ai/common/TFMP_ImageClassification.ts", "../src/ai/common/TFMP_ImageEmbedding.ts", "../src/ai/common/TFMP_ImageSegmentation.ts", "../src/ai/common/TFMP_ModelInfo.ts", "../src/ai/common/TFMP_ModelSearch.ts", "../src/ai/common/TFMP_Constants.ts", "../src/ai/common/TFMP_ObjectDetection.ts", "../src/ai/common/TFMP_PoseLandmarker.ts", "../src/ai/common/TFMP_TextClassification.ts", "../src/ai/common/TFMP_TextEmbedding.ts", "../src/ai/common/TFMP_TextLanguageDetection.ts", "../src/ai/common/TFMP_Unload.ts", "../src/ai/common/TFMP_JobRunFns.ts", "../src/ai/TensorFlowMediaPipeQueuedProvider.ts", "../src/ai/common/TFMP_Capabilities.ts", "../src/ai/registerTensorFlowMediaPipeWorker.ts", "../src/ai/TensorFlowMediaPipeProvider.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\ntype TfmpTasksTextModule = typeof import(\"@mediapipe/tasks-text\");\ntype TfmpTasksVisionModule = typeof import(\"@mediapipe/tasks-vision\");\n\nlet _loadPromiseText: Promise<TfmpTasksTextModule> | undefined;\nlet _loadPromiseVision: Promise<TfmpTasksVisionModule> | undefined;\n\n// NOTE: we do not want to de-dup this in the provider-utils, vite wants direct import with string literals.\nexport async function loadTfmpTasksTextSDK(): Promise<TfmpTasksTextModule> {\n _loadPromiseText ??= import(\"@mediapipe/tasks-text\").catch(() => {\n _loadPromiseText = undefined;\n throw new Error(\n \"@mediapipe/tasks-text is required for TensorFlow MediaPipe text (and related) tasks. Install with: bun add @mediapipe/tasks-text\"\n );\n });\n return _loadPromiseText;\n}\n\n// NOTE: we do not want to de-dup this in the provider-utils, vite wants direct import with string literals.\nexport async function loadTfmpTasksVisionSDK(): Promise<TfmpTasksVisionModule> {\n _loadPromiseVision ??= import(\"@mediapipe/tasks-vision\").catch(() => {\n _loadPromiseVision = undefined;\n throw new Error(\n \"@mediapipe/tasks-vision is required for TensorFlow MediaPipe vision tasks. Install with: bun add @mediapipe/tasks-vision\"\n );\n });\n return _loadPromiseVision;\n}\n",
6
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRegisterOptions } from \"@workglow/ai\";\nimport { registerProviderInline } from \"@workglow/ai/provider-utils\";\nimport { TFMP_TASKS } from \"./common/TFMP_JobRunFns\";\nimport { TensorFlowMediaPipeQueuedProvider } from \"./TensorFlowMediaPipeQueuedProvider\";\n\nexport async function registerTensorFlowMediaPipeInline(\n options?: AiProviderRegisterOptions\n): Promise<void> {\n await registerProviderInline(\n new TensorFlowMediaPipeQueuedProvider(TFMP_TASKS),\n \"TensorFlow MediaPipe\",\n options\n );\n}\n",
7
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ModelSearchResultItem,\n ModelSearchTaskInput,\n ModelSearchTaskOutput,\n} from \"@workglow/ai\";\nimport { filterModelSearchResultsByQuery } from \"@workglow/ai/provider-utils\";\nimport { TENSORFLOW_MEDIAPIPE } from \"./TFMP_Constants\";\n\nconst TFMP_MODEL_RESULTS: ModelSearchResultItem[] = [\n {\n id: \"universal-sentence-encoder\",\n label: \"Universal Sentence Encoder\",\n description: \"Text embedding model\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"Universal Sentence Encoder\",\n description: \"Universal Sentence Encoder\",\n tasks: [\"TextEmbeddingTask\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-tasks/text_embedder/universal_sentence_encoder.tflite\",\n task_engine: \"text\",\n pipeline: \"text-embedder\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"language-detector\",\n label: \"MediaPipe Language Detector\",\n description: \"Language detection model\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"MediaPipe Language Detector\",\n description: \"MediaPipe Language Detector\",\n tasks: [\"TextLanguageDetectionTask\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-models/language_detector/language_detector/float32/latest/language_detector.tflite\",\n task_engine: \"text\",\n pipeline: \"text-language-detector\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"bert-text-classifier\",\n label: \"MediaPipe BERT Text Classifier\",\n description: \"Text classification model\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"MediaPipe BERT Text Classifier\",\n description: \"MediaPipe BERT Text Classifier\",\n tasks: [\"TextClassificationTask\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-tasks/text_classifier/bert_text_classifier.tflite\",\n task_engine: \"text\",\n pipeline: \"text-classifier\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"image-embedder\",\n label: \"MediaPipe Image Embedder\",\n description: \"Image embedding model\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"MediaPipe Image Embedder\",\n description: \"MediaPipe Image Embedder\",\n tasks: [\"ImageEmbeddingTask\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-models/image_embedder/mobilenet_v3_small/float32/1/mobilenet_v3_small.tflite\",\n task_engine: \"vision\",\n pipeline: \"vision-image-embedder\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"efficientnet-lite0\",\n label: \"EfficientNet Lite0\",\n description: \"Image classification model\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"EfficientNet Lite0\",\n description: \"Image classification model\",\n tasks: [\"ImageClassificationTask\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-models/image_classifier/efficientnet_lite0/float32/1/efficientnet_lite0.tflite\",\n task_engine: \"vision\",\n pipeline: \"vision-image-classifier\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"efficientdet-lite0\",\n label: \"Efficient Object Detector Lite0\",\n description: \"Object detection model\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"Efficient Object Detector Lite0\",\n description: \"Object detection model\",\n tasks: [\"ObjectDetectionTask\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-models/object_detector/efficientdet_lite0/float32/1/efficientdet_lite0.tflite\",\n task_engine: \"vision\",\n pipeline: \"vision-object-detector\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"deeplabv3\",\n label: \"Efficient Image Segmenter Lite0\",\n description: \"Image segmentation model\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"Efficient Image Segmenter Lite0\",\n description: \"Image segmentation model\",\n tasks: [\"ImageSegmentationTask\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-assets/deeplabv3.tflite?generation=1661875711618421\",\n task_engine: \"vision\",\n pipeline: \"vision-image-segmenter\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"face-landmarker\",\n label: \"Face Landmarker\",\n description: \"Detects 478 facial landmarks with blendshapes\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"Face Landmarker\",\n description: \"Detects 478 facial landmarks with blendshapes\",\n tasks: [\"FaceLandmarkerTask\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/1/face_landmarker.task\",\n task_engine: \"vision\",\n pipeline: \"vision-face-landmarker\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"gesture-recognizer\",\n label: \"Gesture Recognizer\",\n description: \"Recognizes hand gestures such as thumbs up and victory\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"Gesture Recognizer\",\n description: \"Recognizes hand gestures such as thumbs up and victory\",\n tasks: [\"GestureRecognizerTask\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-models/gesture_recognizer/gesture_recognizer/float16/1/gesture_recognizer.task\",\n task_engine: \"vision\",\n pipeline: \"vision-gesture-recognizer\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"hand-landmarker\",\n label: \"Hand Landmarker\",\n description: \"Detects 21 hand landmarks\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"Hand Landmarker\",\n description: \"Detects 21 hand landmarks\",\n tasks: [\"HandLandmarkerTask\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-models/hand_landmarker/hand_landmarker/float16/1/hand_landmarker.task\",\n task_engine: \"vision\",\n pipeline: \"vision-hand-landmarker\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"pose-landmarker\",\n label: \"Pose Landmarker\",\n description: \"Detects 33 body pose landmarks\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"Pose Landmarker\",\n description: \"Detects 33 body pose landmarks\",\n tasks: [\"PoseLandmarkerTask\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-models/pose_landmarker/pose_landmarker_lite/float16/1/pose_landmarker_lite.task\",\n task_engine: \"vision\",\n pipeline: \"vision-pose-landmarker\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n];\n\nexport function createTFMPModelSearch(\n providerId: string\n): AiProviderRunFn<ModelSearchTaskInput, ModelSearchTaskOutput> {\n return async (input) => {\n const results = filterModelSearchResultsByQuery(\n TFMP_MODEL_RESULTS.map((result) => ({\n ...result,\n record: { ...result.record, provider: providerId },\n })),\n input.query\n );\n return { results };\n };\n}\n\nexport const TFMP_ModelSearch: AiProviderRunFn<ModelSearchTaskInput, ModelSearchTaskOutput> =\n createTFMPModelSearch(TENSORFLOW_MEDIAPIPE);\n",
8
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const TENSORFLOW_MEDIAPIPE = \"TENSORFLOW_MEDIAPIPE\";\n\nexport const TFMP_DEFAULT_TASK_TYPES = [\n \"DownloadModelTask\",\n \"UnloadModelTask\",\n \"ModelInfoTask\",\n \"TextEmbeddingTask\",\n \"TextLanguageDetectionTask\",\n \"TextClassificationTask\",\n \"ImageSegmentationTask\",\n \"ImageEmbeddingTask\",\n \"ImageClassificationTask\",\n \"ObjectDetectionTask\",\n \"GestureRecognizerTask\",\n \"HandLandmarkerTask\",\n \"FaceDetectorTask\",\n \"FaceLandmarkerTask\",\n \"PoseLandmarkerTask\",\n \"ModelSearchTask\",\n] as const;\n\nexport type TextPipelineTask =\n | \"text-embedder\"\n | \"text-classifier\"\n | \"text-language-detector\"\n | \"genai-text\"\n | \"audio-classifier\"\n | \"audio-embedder\"\n | \"vision-face-detector\"\n | \"vision-face-landmarker\"\n | \"vision-face-stylizer\"\n | \"vision-gesture-recognizer\"\n | \"vision-hand-landmarker\"\n | \"vision-holistic-landmarker\"\n | \"vision-image-classifier\"\n | \"vision-image-embedder\"\n | \"vision-image-segmenter\"\n | \"vision-image-interactive-segmenter\"\n | \"vision-object-detector\"\n | \"vision-pose-landmarker\";\n\nexport const TextPipelineTask = {\n \"text-embedder\": \"text-embedder\",\n \"text-classifier\": \"text-classifier\",\n \"text-language-detector\": \"text-language-detector\",\n \"genai-text\": \"genai-text\",\n \"audio-classifier\": \"audio-classifier\",\n \"audio-embedder\": \"audio-embedder\",\n \"vision-face-detector\": \"vision-face-detector\",\n \"vision-face-landmarker\": \"vision-face-landmarker\",\n \"vision-face-stylizer\": \"vision-face-stylizer\",\n \"vision-gesture-recognizer\": \"vision-gesture-recognizer\",\n \"vision-hand-landmarker\": \"vision-hand-landmarker\",\n \"vision-holistic-landmarker\": \"vision-holistic-landmarker\",\n \"vision-image-classifier\": \"vision-image-classifier\",\n \"vision-image-embedder\": \"vision-image-embedder\",\n \"vision-image-segmenter\": \"vision-image-segmenter\",\n \"vision-image-interactive-segmenter\": \"vision-image-interactive-segmenter\",\n \"vision-object-detector\": \"vision-object-detector\",\n \"vision-pose-landmarker\": \"vision-pose-landmarker\",\n} as const satisfies Record<TextPipelineTask, TextPipelineTask>;\n",
9
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n DownloadModelTaskRunInput,\n DownloadModelTaskRunOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksTextSDK, loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask, wasm_reference_counts } from \"./TFMP_Runtime\";\nimport type { TaskInstance } from \"./TFMP_Runtime\";\n\nexport const TFMP_Download: AiProviderRunFn<\n DownloadModelTaskRunInput,\n DownloadModelTaskRunOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n let task: TaskInstance;\n switch (model?.provider_config.pipeline) {\n case \"text-embedder\": {\n const { TextEmbedder } = await loadTfmpTasksTextSDK();\n task = await getModelTask(model, {}, onProgress, signal, TextEmbedder);\n break;\n }\n case \"text-classifier\": {\n const { TextClassifier } = await loadTfmpTasksTextSDK();\n task = await getModelTask(model, {}, onProgress, signal, TextClassifier);\n break;\n }\n case \"text-language-detector\": {\n const { LanguageDetector } = await loadTfmpTasksTextSDK();\n task = await getModelTask(model, {}, onProgress, signal, LanguageDetector);\n break;\n }\n case \"vision-image-classifier\": {\n const { ImageClassifier } = await loadTfmpTasksVisionSDK();\n task = await getModelTask(model, {}, onProgress, signal, ImageClassifier);\n break;\n }\n case \"vision-image-embedder\": {\n const { ImageEmbedder } = await loadTfmpTasksVisionSDK();\n task = await getModelTask(model, {}, onProgress, signal, ImageEmbedder);\n break;\n }\n case \"vision-image-segmenter\": {\n const { ImageSegmenter } = await loadTfmpTasksVisionSDK();\n task = await getModelTask(model, {}, onProgress, signal, ImageSegmenter);\n break;\n }\n case \"vision-object-detector\": {\n const { ObjectDetector } = await loadTfmpTasksVisionSDK();\n task = await getModelTask(model, {}, onProgress, signal, ObjectDetector);\n break;\n }\n case \"vision-face-detector\": {\n const { FaceDetector } = await loadTfmpTasksVisionSDK();\n task = await getModelTask(model, {}, onProgress, signal, FaceDetector);\n break;\n }\n case \"vision-face-landmarker\": {\n const { FaceLandmarker } = await loadTfmpTasksVisionSDK();\n task = await getModelTask(model, {}, onProgress, signal, FaceLandmarker);\n break;\n }\n case \"vision-gesture-recognizer\": {\n const { GestureRecognizer } = await loadTfmpTasksVisionSDK();\n task = await getModelTask(model, {}, onProgress, signal, GestureRecognizer);\n break;\n }\n case \"vision-hand-landmarker\": {\n const { HandLandmarker } = await loadTfmpTasksVisionSDK();\n task = await getModelTask(model, {}, onProgress, signal, HandLandmarker);\n break;\n }\n case \"vision-pose-landmarker\": {\n const { PoseLandmarker } = await loadTfmpTasksVisionSDK();\n task = await getModelTask(model, {}, onProgress, signal, PoseLandmarker);\n break;\n }\n default:\n throw new PermanentJobError(\n `Invalid pipeline: ${model?.provider_config.pipeline}. Supported pipelines: text-embedder, text-classifier, text-language-detector, vision-image-classifier, vision-image-embedder, vision-image-segmenter, vision-object-detector, vision-face-detector, vision-face-landmarker, vision-gesture-recognizer, vision-hand-landmarker, vision-pose-landmarker`\n );\n }\n onProgress(0.9, \"Pipeline loaded\");\n task.close();\n const task_engine = model?.provider_config.task_engine;\n wasm_reference_counts.set(task_engine, wasm_reference_counts.get(task_engine)! - 1);\n\n return {\n model: input.model,\n };\n};\n",
10
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksTextSDK, loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\n\nexport interface TFMPWasmFileset {\n readonly wasmLoaderPath: string;\n readonly wasmBinaryPath: string;\n readonly assetLoaderPath?: string;\n readonly assetBinaryPath?: string;\n}\n\nexport const wasm_tasks = new Map<string, TFMPWasmFileset>();\nexport const wasm_reference_counts = new Map<string, number>();\n\ntype TaskConstructor = {\n createFromOptions(\n wasmFileset: TFMPWasmFileset,\n options: Record<string, unknown>\n ): Promise<TaskInstance>;\n};\n\nexport type TaskInstance = {\n close(): void;\n [key: string]: any;\n};\n\nexport interface CachedModelTask {\n readonly task: TaskInstance;\n readonly options: Record<string, unknown>;\n readonly task_engine: string;\n}\n\nexport const modelTaskCache = new Map<string, CachedModelTask[]>();\n\nconst optionsMatch = (opts1: Record<string, unknown>, opts2: Record<string, unknown>): boolean => {\n const keys1 = Object.keys(opts1).sort();\n const keys2 = Object.keys(opts2).sort();\n\n if (keys1.length !== keys2.length) return false;\n\n return keys1.every((key) => {\n const val1 = opts1[key];\n const val2 = opts2[key];\n\n if (Array.isArray(val1) && Array.isArray(val2)) {\n return JSON.stringify(val1) === JSON.stringify(val2);\n }\n\n return val1 === val2;\n });\n};\n\nconst getWasmTask = async (\n model: TFMPModelConfig,\n onProgress: (progress: number, message?: string, details?: any) => void,\n signal: AbortSignal\n): Promise<TFMPWasmFileset> => {\n const task_engine = model.provider_config.task_engine;\n\n if (wasm_tasks.has(task_engine)) {\n return wasm_tasks.get(task_engine)!;\n }\n\n if (signal.aborted) {\n throw new PermanentJobError(\"Aborted job\");\n }\n\n onProgress(0.1, \"Loading WASM task\");\n\n let wasmFileset: TFMPWasmFileset;\n\n switch (task_engine) {\n case \"vision\": {\n const { FilesetResolver } = await loadTfmpTasksVisionSDK();\n wasmFileset = await FilesetResolver.forVisionTasks(\n \"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm\"\n );\n break;\n }\n case \"text\": {\n const { FilesetResolver } = await loadTfmpTasksTextSDK();\n wasmFileset = await FilesetResolver.forTextTasks(\n \"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-text@latest/wasm\"\n );\n break;\n }\n case \"audio\": {\n const { FilesetResolver } = await loadTfmpTasksTextSDK();\n wasmFileset = await FilesetResolver.forAudioTasks(\n \"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-audio@latest/wasm\"\n );\n break;\n }\n case \"genai\": {\n const { FilesetResolver } = await loadTfmpTasksTextSDK();\n wasmFileset = await FilesetResolver.forGenAiTasks(\n \"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai@latest/wasm\"\n );\n break;\n }\n default:\n throw new PermanentJobError(\"Invalid task engine\");\n }\n\n wasm_tasks.set(task_engine, wasmFileset);\n return wasmFileset;\n};\n\nexport const getModelTask = async (\n model: TFMPModelConfig,\n options: Record<string, unknown>,\n onProgress: (progress: number, message?: string, details?: any) => void,\n signal: AbortSignal,\n TaskType: TaskConstructor\n): Promise<any> => {\n const model_path = model.provider_config.model_path;\n const task_engine = model.provider_config.task_engine;\n\n const cachedTasks = modelTaskCache.get(model_path);\n if (cachedTasks) {\n const matchedTask = cachedTasks.find((cached) => optionsMatch(cached.options, options));\n if (matchedTask) {\n return matchedTask.task;\n }\n }\n\n const wasmFileset = await getWasmTask(model, onProgress, signal);\n\n onProgress(0.2, \"Creating model task\");\n\n const task = await TaskType.createFromOptions(wasmFileset, {\n baseOptions: {\n modelAssetPath: model_path,\n },\n ...options,\n });\n\n const cachedTask: CachedModelTask = { task, options, task_engine };\n if (!modelTaskCache.has(model_path)) {\n modelTaskCache.set(model_path, []);\n }\n modelTaskCache.get(model_path)!.push(cachedTask);\n\n wasm_reference_counts.set(task_engine, (wasm_reference_counts.get(task_engine) || 0) + 1);\n\n return task;\n};\n",
11
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRunFn, FaceDetectorTaskInput, FaceDetectorTaskOutput } from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_FaceDetector: AiProviderRunFn<\n FaceDetectorTaskInput,\n FaceDetectorTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { FaceDetector } = await loadTfmpTasksVisionSDK();\n const faceDetector = await getModelTask(\n model!,\n {\n minDetectionConfidence: input.minDetectionConfidence,\n minSuppressionThreshold: input.minSuppressionThreshold,\n },\n onProgress,\n signal,\n FaceDetector\n );\n const result = faceDetector.detect(input.image as any);\n\n if (!result.detections) {\n throw new PermanentJobError(\"Failed to detect faces: Empty result\");\n }\n\n const faces = result.detections.map((detection: any) => ({\n box: {\n x: detection.boundingBox?.originX || 0,\n y: detection.boundingBox?.originY || 0,\n width: detection.boundingBox?.width || 0,\n height: detection.boundingBox?.height || 0,\n },\n keypoints:\n detection.keypoints?.map((kp: any) => ({\n x: kp.x,\n y: kp.y,\n label: kp.label,\n })) || [],\n score: detection.categories?.[0]?.score || 0,\n }));\n\n return {\n faces,\n };\n};\n",
12
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n FaceLandmarkerTaskInput,\n FaceLandmarkerTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_FaceLandmarker: AiProviderRunFn<\n FaceLandmarkerTaskInput,\n FaceLandmarkerTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { FaceLandmarker } = await loadTfmpTasksVisionSDK();\n const faceLandmarker = await getModelTask(\n model!,\n {\n numFaces: input.numFaces,\n minFaceDetectionConfidence: input.minFaceDetectionConfidence,\n minFacePresenceConfidence: input.minFacePresenceConfidence,\n minTrackingConfidence: input.minTrackingConfidence,\n outputFaceBlendshapes: input.outputFaceBlendshapes,\n outputFacialTransformationMatrixes: input.outputFacialTransformationMatrixes,\n },\n onProgress,\n signal,\n FaceLandmarker\n );\n const result = faceLandmarker.detect(input.image as any);\n\n if (!result.faceLandmarks) {\n throw new PermanentJobError(\"Failed to detect face landmarks: Empty result\");\n }\n\n const faces = result.faceLandmarks.map((landmarks: any, index: number) => {\n const face: any = {\n landmarks: landmarks.map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n })),\n };\n\n if (result.faceBlendshapes && result.faceBlendshapes[index]) {\n face.blendshapes = result.faceBlendshapes[index].categories.map((b: any) => ({\n label: b.categoryName,\n score: b.score,\n }));\n }\n\n if (result.facialTransformationMatrixes && result.facialTransformationMatrixes[index]) {\n face.transformationMatrix = Array.from(result.facialTransformationMatrixes[index].data);\n }\n\n return face;\n });\n\n return {\n faces,\n };\n};\n",
13
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n GestureRecognizerTaskInput,\n GestureRecognizerTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_GestureRecognizer: AiProviderRunFn<\n GestureRecognizerTaskInput,\n GestureRecognizerTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { GestureRecognizer } = await loadTfmpTasksVisionSDK();\n const gestureRecognizer = await getModelTask(\n model!,\n {\n numHands: input.numHands,\n minHandDetectionConfidence: input.minHandDetectionConfidence,\n minHandPresenceConfidence: input.minHandPresenceConfidence,\n minTrackingConfidence: input.minTrackingConfidence,\n },\n onProgress,\n signal,\n GestureRecognizer\n );\n const result = gestureRecognizer.recognize(input.image);\n\n if (!result.gestures || !result.landmarks) {\n throw new PermanentJobError(\"Failed to recognize gestures: Empty result\");\n }\n\n const hands = result.gestures.map((gestures: any, index: number) => ({\n gestures: gestures.map((g: any) => ({\n label: g.categoryName,\n score: g.score,\n })),\n handedness: result.handedness[index].map((h: any) => ({\n label: h.categoryName,\n score: h.score,\n })),\n landmarks: result.landmarks[index].map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n })),\n worldLandmarks: result.worldLandmarks[index].map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n })),\n }));\n\n return {\n hands,\n };\n};\n",
14
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n HandLandmarkerTaskInput,\n HandLandmarkerTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_HandLandmarker: AiProviderRunFn<\n HandLandmarkerTaskInput,\n HandLandmarkerTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { HandLandmarker } = await loadTfmpTasksVisionSDK();\n const handLandmarker = await getModelTask(\n model!,\n {\n numHands: input.numHands,\n minHandDetectionConfidence: input.minHandDetectionConfidence,\n minHandPresenceConfidence: input.minHandPresenceConfidence,\n minTrackingConfidence: input.minTrackingConfidence,\n },\n onProgress,\n signal,\n HandLandmarker\n );\n const result = handLandmarker.detect(input.image);\n\n if (!result.landmarks) {\n throw new PermanentJobError(\"Failed to detect hand landmarks: Empty result\");\n }\n\n const hands = result.landmarks.map((landmarks: any, index: number) => ({\n handedness: result.handedness[index].map((h: any) => ({\n label: h.categoryName,\n score: h.score,\n })),\n landmarks: landmarks.map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n })),\n worldLandmarks: result.worldLandmarks[index].map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n })),\n }));\n\n return {\n hands,\n };\n};\n",
15
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ImageClassificationTaskInput,\n ImageClassificationTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_ImageClassification: AiProviderRunFn<\n ImageClassificationTaskInput,\n ImageClassificationTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { ImageClassifier } = await loadTfmpTasksVisionSDK();\n const imageClassifier = await getModelTask(\n model!,\n {\n maxResults: input.maxCategories,\n },\n onProgress,\n signal,\n ImageClassifier\n );\n const result = imageClassifier.classify(input.image);\n\n if (!result.classifications?.[0]?.categories) {\n throw new PermanentJobError(\"Failed to classify image: Empty result\");\n }\n\n const categories = result.classifications[0].categories.map(\n (category: { categoryName: string; score: number }) => ({\n label: category.categoryName,\n score: category.score,\n })\n );\n\n return {\n categories,\n };\n};\n",
16
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ImageEmbeddingTaskInput,\n ImageEmbeddingTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_ImageEmbedding: AiProviderRunFn<\n ImageEmbeddingTaskInput,\n ImageEmbeddingTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { ImageEmbedder } = await loadTfmpTasksVisionSDK();\n const imageEmbedder = await getModelTask(model!, {}, onProgress, signal, ImageEmbedder);\n\n if (Array.isArray(input.image)) {\n const vectors: Float32Array[] = [];\n for (const image of input.image) {\n const result = imageEmbedder.embed(image as any);\n if (!result.embeddings?.[0]?.floatEmbedding) {\n throw new PermanentJobError(\"Failed to generate embedding: Empty result\");\n }\n vectors.push(Float32Array.from(result.embeddings[0].floatEmbedding));\n }\n return { vector: vectors } as ImageEmbeddingTaskOutput;\n }\n\n const result = imageEmbedder.embed(input.image as any);\n\n if (!result.embeddings?.[0]?.floatEmbedding) {\n throw new PermanentJobError(\"Failed to generate embedding: Empty result\");\n }\n\n const embedding = Float32Array.from(result.embeddings[0].floatEmbedding);\n\n return {\n vector: embedding,\n } as ImageEmbeddingTaskOutput;\n};\n",
17
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ImageSegmentationTaskInput,\n ImageSegmentationTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_ImageSegmentation: AiProviderRunFn<\n ImageSegmentationTaskInput,\n ImageSegmentationTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { ImageSegmenter } = await loadTfmpTasksVisionSDK();\n const imageSegmenter = await getModelTask(model!, {}, onProgress, signal, ImageSegmenter);\n const result = imageSegmenter.segment(input.image as any);\n\n if (!result.categoryMask) {\n throw new PermanentJobError(\"Failed to segment image: Empty result\");\n }\n\n const masks = [\n {\n label: \"segment\",\n score: 1.0,\n mask: {\n data: result.categoryMask.canvas,\n width: result.categoryMask.width,\n height: result.categoryMask.height,\n },\n },\n ];\n\n return {\n masks,\n };\n};\n",
18
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRunFn, ModelInfoTaskInput, ModelInfoTaskOutput } from \"@workglow/ai\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { modelTaskCache } from \"./TFMP_Runtime\";\n\n/** Known MediaPipe embedding model dimensions. */\nconst TFMP_EMBEDDING_DIMENSIONS: Record<string, { native_dimensions: number; mrl: boolean }> = {\n \"universal-sentence-encoder\": { native_dimensions: 512, mrl: false },\n};\n\nexport const TFMP_ModelInfo: AiProviderRunFn<\n ModelInfoTaskInput,\n ModelInfoTaskOutput,\n TFMPModelConfig\n> = async (input, model) => {\n if (input.detail === \"dimensions\") {\n const pc = model?.provider_config as Record<string, unknown>;\n let native_dimensions =\n typeof pc?.native_dimensions === \"number\" ? pc.native_dimensions : undefined;\n const mrl = typeof pc?.mrl === \"boolean\" ? pc.mrl : false;\n if (native_dimensions === undefined) {\n const modelPath = (pc?.model_path as string) ?? \"\";\n const known = TFMP_EMBEDDING_DIMENSIONS[modelPath];\n if (known) {\n native_dimensions = known.native_dimensions;\n }\n }\n return {\n model: input.model,\n is_local: true,\n is_remote: false,\n supports_browser: true,\n supports_node: false,\n is_cached: false,\n is_loaded: false,\n file_sizes: null,\n ...(native_dimensions !== undefined ? { native_dimensions } : {}),\n ...(mrl ? { mrl } : {}),\n };\n }\n\n const model_path = model!.provider_config.model_path;\n const is_loaded = modelTaskCache.has(model_path);\n\n return {\n model: input.model,\n is_local: true,\n is_remote: false,\n supports_browser: true,\n supports_node: false,\n is_cached: is_loaded,\n is_loaded,\n file_sizes: null,\n };\n};\n",
19
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ObjectDetectionTaskInput,\n ObjectDetectionTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_ObjectDetection: AiProviderRunFn<\n ObjectDetectionTaskInput,\n ObjectDetectionTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { ObjectDetector } = await loadTfmpTasksVisionSDK();\n const objectDetector = await getModelTask(\n model!,\n {\n scoreThreshold: input.threshold,\n },\n onProgress,\n signal,\n ObjectDetector\n );\n const result = objectDetector.detect(input.image);\n\n if (!result.detections) {\n throw new PermanentJobError(\"Failed to detect objects: Empty result\");\n }\n\n const detections = result.detections.map((detection: any) => ({\n label: detection.categories?.[0]?.categoryName || \"unknown\",\n score: detection.categories?.[0]?.score || 0,\n box: {\n x: detection.boundingBox?.originX || 0,\n y: detection.boundingBox?.originY || 0,\n width: detection.boundingBox?.width || 0,\n height: detection.boundingBox?.height || 0,\n },\n }));\n\n return {\n detections,\n };\n};\n",
20
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n PoseLandmarkerTaskInput,\n PoseLandmarkerTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_PoseLandmarker: AiProviderRunFn<\n PoseLandmarkerTaskInput,\n PoseLandmarkerTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { PoseLandmarker } = await loadTfmpTasksVisionSDK();\n const poseLandmarker = await getModelTask(\n model!,\n {\n numPoses: input.numPoses,\n minPoseDetectionConfidence: input.minPoseDetectionConfidence,\n minPosePresenceConfidence: input.minPosePresenceConfidence,\n minTrackingConfidence: input.minTrackingConfidence,\n outputSegmentationMasks: input.outputSegmentationMasks,\n },\n onProgress,\n signal,\n PoseLandmarker\n );\n const result = poseLandmarker.detect(input.image);\n\n if (!result.landmarks) {\n throw new PermanentJobError(\"Failed to detect pose landmarks: Empty result\");\n }\n\n const poses = result.landmarks.map((landmarks: any, index: number) => {\n const pose: any = {\n landmarks: landmarks.map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n visibility: l.visibility,\n presence: l.presence,\n })),\n worldLandmarks: result.worldLandmarks[index].map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n visibility: l.visibility,\n presence: l.presence,\n })),\n };\n\n if (result.segmentationMasks && result.segmentationMasks[index]) {\n const mask = result.segmentationMasks[index];\n pose.segmentationMask = {\n data: mask.canvas || mask,\n width: mask.width,\n height: mask.height,\n };\n }\n\n return pose;\n });\n\n return {\n poses,\n };\n};\n",
21
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n TextClassificationTaskInput,\n TextClassificationTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksTextSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_TextClassification: AiProviderRunFn<\n TextClassificationTaskInput,\n TextClassificationTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { TextClassifier } = await loadTfmpTasksTextSDK();\n const TextClassification = await getModelTask(\n model!,\n {\n maxCategories: input.maxCategories,\n },\n onProgress,\n signal,\n TextClassifier\n );\n const result = TextClassification.classify(input.text);\n\n if (!result.classifications?.[0]?.categories) {\n throw new PermanentJobError(\"Failed to classify text: Empty result\");\n }\n\n const categories = result.classifications[0].categories.map((category: any) => ({\n label: category.categoryName,\n score: category.score,\n }));\n\n return {\n categories,\n };\n};\n",
22
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksTextSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_TextEmbedding: AiProviderRunFn<\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const { TextEmbedder } = await loadTfmpTasksTextSDK();\n const textEmbedder = await getModelTask(model!, {}, onProgress, signal, TextEmbedder);\n\n if (Array.isArray(input.text)) {\n const embeddings = input.text.map((text) => {\n const result = textEmbedder.embed(text);\n\n if (!result.embeddings?.[0]?.floatEmbedding) {\n throw new PermanentJobError(\"Failed to generate embedding: Empty result\");\n }\n\n return Float32Array.from(result.embeddings[0].floatEmbedding);\n });\n\n return {\n vector: embeddings,\n };\n }\n\n const result = textEmbedder.embed(input.text);\n\n if (!result.embeddings?.[0]?.floatEmbedding) {\n throw new PermanentJobError(\"Failed to generate embedding: Empty result\");\n }\n\n const embedding = Float32Array.from(result.embeddings[0].floatEmbedding);\n\n return {\n vector: embedding,\n };\n};\n",
23
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n TextLanguageDetectionTaskInput,\n TextLanguageDetectionTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksTextSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_TextLanguageDetection: AiProviderRunFn<\n TextLanguageDetectionTaskInput,\n TextLanguageDetectionTaskOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, signal) => {\n const maxLanguages = input.maxLanguages === 0 ? -1 : input.maxLanguages;\n\n const { LanguageDetector } = await loadTfmpTasksTextSDK();\n const textLanguageDetector = await getModelTask(\n model!,\n {\n maxLanguages,\n },\n onProgress,\n signal,\n LanguageDetector\n );\n const result = textLanguageDetector.detect(input.text);\n\n if (!result.languages?.[0]?.languageCode) {\n throw new PermanentJobError(\"Failed to detect language: Empty result\");\n }\n\n const languages = result.languages.map((language: any) => ({\n language: language.languageCode,\n score: language.probability,\n }));\n\n return {\n languages,\n };\n};\n",
24
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n UnloadModelTaskRunInput,\n UnloadModelTaskRunOutput,\n} from \"@workglow/ai\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { modelTaskCache, wasm_reference_counts, wasm_tasks } from \"./TFMP_Runtime\";\n\nexport const TFMP_Unload: AiProviderRunFn<\n UnloadModelTaskRunInput,\n UnloadModelTaskRunOutput,\n TFMPModelConfig\n> = async (input, model, onProgress, _signal) => {\n const model_path = model!.provider_config.model_path;\n onProgress(10, \"Unloading model\");\n if (modelTaskCache.has(model_path)) {\n const cachedTasks = modelTaskCache.get(model_path)!;\n\n for (const cachedTask of cachedTasks) {\n const task = cachedTask.task;\n if (\"close\" in task && typeof task.close === \"function\") task.close();\n\n const task_engine = cachedTask.task_engine;\n const currentCount = wasm_reference_counts.get(task_engine) || 0;\n const newCount = currentCount - 1;\n\n if (newCount <= 0) {\n wasm_tasks.delete(task_engine);\n wasm_reference_counts.delete(task_engine);\n } else {\n wasm_reference_counts.set(task_engine, newCount);\n }\n }\n\n modelTaskCache.delete(model_path);\n }\n\n return {\n model: input.model,\n };\n};\n",
25
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRunFn } from \"@workglow/ai\";\nimport type { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { TFMP_ModelSearch } from \"./TFMP_ModelSearch\";\n\nimport { TFMP_Download } from \"./TFMP_Download\";\nimport { TFMP_FaceDetector } from \"./TFMP_FaceDetector\";\nimport { TFMP_FaceLandmarker } from \"./TFMP_FaceLandmarker\";\nimport { TFMP_GestureRecognizer } from \"./TFMP_GestureRecognizer\";\nimport { TFMP_HandLandmarker } from \"./TFMP_HandLandmarker\";\nimport { TFMP_ImageClassification } from \"./TFMP_ImageClassification\";\nimport { TFMP_ImageEmbedding } from \"./TFMP_ImageEmbedding\";\nimport { TFMP_ImageSegmentation } from \"./TFMP_ImageSegmentation\";\nimport { TFMP_ModelInfo } from \"./TFMP_ModelInfo\";\nimport { TFMP_ObjectDetection } from \"./TFMP_ObjectDetection\";\nimport { TFMP_PoseLandmarker } from \"./TFMP_PoseLandmarker\";\nimport { TFMP_TextClassification } from \"./TFMP_TextClassification\";\nimport { TFMP_TextEmbedding } from \"./TFMP_TextEmbedding\";\nimport { TFMP_TextLanguageDetection } from \"./TFMP_TextLanguageDetection\";\nimport { TFMP_Unload } from \"./TFMP_Unload\";\n\nexport { loadTfmpTasksTextSDK, loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\n\nexport const TFMP_TASKS: Record<string, AiProviderRunFn<any, any, TFMPModelConfig>> = {\n DownloadModelTask: TFMP_Download,\n UnloadModelTask: TFMP_Unload,\n ModelInfoTask: TFMP_ModelInfo,\n TextEmbeddingTask: TFMP_TextEmbedding,\n TextLanguageDetectionTask: TFMP_TextLanguageDetection,\n TextClassificationTask: TFMP_TextClassification,\n ImageSegmentationTask: TFMP_ImageSegmentation,\n ImageEmbeddingTask: TFMP_ImageEmbedding,\n ImageClassificationTask: TFMP_ImageClassification,\n ObjectDetectionTask: TFMP_ObjectDetection,\n GestureRecognizerTask: TFMP_GestureRecognizer,\n HandLandmarkerTask: TFMP_HandLandmarker,\n FaceDetectorTask: TFMP_FaceDetector,\n FaceLandmarkerTask: TFMP_FaceLandmarker,\n PoseLandmarkerTask: TFMP_PoseLandmarker,\n ModelSearchTask: TFMP_ModelSearch,\n};\n",
26
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AiProvider } from \"@workglow/ai\";\nimport type { AiProviderPreviewRunFn, AiProviderRunFn } from \"@workglow/ai\";\nimport { TENSORFLOW_MEDIAPIPE, TFMP_DEFAULT_TASK_TYPES } from \"./common/TFMP_Constants\";\nimport type { TFMPModelConfig } from \"./common/TFMP_ModelSchema\";\n\n/** Main-thread registration (inline or worker-backed). WASM-only uses direct execution. */\nexport class TensorFlowMediaPipeQueuedProvider extends AiProvider<TFMPModelConfig> {\n readonly name = TENSORFLOW_MEDIAPIPE;\n readonly displayName = \"TensorFlow MediaPipe\";\n readonly isLocal = true;\n readonly supportsBrowser = true;\n\n readonly taskTypes: readonly string[] = TFMP_DEFAULT_TASK_TYPES;\n\n constructor(\n tasks?: Record<string, AiProviderRunFn<any, any, TFMPModelConfig>>,\n previewTasks?: Record<string, AiProviderPreviewRunFn<any, any, TFMPModelConfig>>\n ) {\n super(tasks, undefined, previewTasks);\n }\n}\n",
27
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { registerProviderWorker } from \"@workglow/ai/provider-utils\";\nimport { TFMP_TASKS } from \"./common/TFMP_JobRunFns\";\nimport { TensorFlowMediaPipeProvider } from \"./TensorFlowMediaPipeProvider\";\n\nexport async function registerTensorFlowMediaPipeWorker(): Promise<void> {\n await registerProviderWorker(\n (ws) => new TensorFlowMediaPipeProvider(TFMP_TASKS).registerOnWorkerServer(ws),\n \"TensorFlow MediaPipe\"\n );\n}\n",
28
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AiProvider } from \"@workglow/ai/worker\";\nimport type { AiProviderPreviewRunFn, AiProviderRunFn } from \"@workglow/ai/worker\";\nimport { TENSORFLOW_MEDIAPIPE, TFMP_DEFAULT_TASK_TYPES } from \"./common/TFMP_Constants\";\nimport type { TFMPModelConfig } from \"./common/TFMP_ModelSchema\";\n\n/**\n * AI provider for TensorFlow MediaPipe models.\n *\n * Task run functions are injected via the constructor so that the heavy\n * `@mediapipe/*` libraries are only pulled in where actually needed\n * (inline mode, worker server), not on the main thread in worker mode.\n * Use `loadTfmpTasksTextSDK` / `loadTfmpTasksVisionSDK` for cached dynamic imports.\n\n */\nexport class TensorFlowMediaPipeProvider extends AiProvider<TFMPModelConfig> {\n readonly name = TENSORFLOW_MEDIAPIPE;\n readonly displayName = \"TensorFlow MediaPipe\";\n readonly isLocal = true;\n readonly supportsBrowser = true;\n\n readonly taskTypes: readonly string[] = TFMP_DEFAULT_TASK_TYPES;\n\n constructor(\n tasks?: Record<string, AiProviderRunFn<any, any, TFMPModelConfig>>,\n previewTasks?: Record<string, AiProviderPreviewRunFn<any, any, TFMPModelConfig>>\n ) {\n super(tasks, undefined, previewTasks);\n }\n}\n"
6
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRegisterOptions } from \"@workglow/ai\";\nimport { registerProviderInline } from \"@workglow/ai/provider-utils\";\nimport { TFMP_RUN_FNS } from \"./common/TFMP_JobRunFns\";\nimport { TensorFlowMediaPipeQueuedProvider } from \"./TensorFlowMediaPipeQueuedProvider\";\n\nexport async function registerTensorFlowMediaPipeInline(\n options?: AiProviderRegisterOptions\n): Promise<void> {\n await registerProviderInline(\n new TensorFlowMediaPipeQueuedProvider(TFMP_RUN_FNS),\n \"TensorFlow MediaPipe\",\n options\n );\n}\n",
7
+ "/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Capability } from \"@workglow/ai/worker\";\n\nexport const TFMP_TEXT_EMBEDDING = [\"text.embedding\"] as const satisfies Capability[];\nexport const TFMP_TEXT_CLASSIFICATION = [\"text.classification\"] as const satisfies Capability[];\nexport const TFMP_TEXT_LANGUAGE_DETECTION = [\n \"text.language-detection\",\n] as const satisfies Capability[];\nexport const TFMP_IMAGE_CLASSIFICATION = [\"image.classification\"] as const satisfies Capability[];\nexport const TFMP_IMAGE_EMBEDDING = [\"image.embedding\"] as const satisfies Capability[];\nexport const TFMP_IMAGE_SEGMENTATION = [\"image.segmentation\"] as const satisfies Capability[];\nexport const TFMP_IMAGE_OBJECT_DETECTION = [\n \"image.object-detection\",\n] as const satisfies Capability[];\nexport const TFMP_VISION_FACE_DETECTION = [\"vision.face-detection\"] as const satisfies Capability[];\nexport const TFMP_VISION_FACE_LANDMARKS = [\"vision.face-landmarks\"] as const satisfies Capability[];\nexport const TFMP_VISION_HAND_LANDMARKS = [\"vision.hand-landmarks\"] as const satisfies Capability[];\nexport const TFMP_VISION_POSE_LANDMARKS = [\"vision.pose-landmarks\"] as const satisfies Capability[];\nexport const TFMP_VISION_GESTURE = [\"vision.gesture\"] as const satisfies Capability[];\nexport const TFMP_MODEL_DOWNLOAD = [\"model.download\"] as const satisfies Capability[];\nexport const TFMP_MODEL_UNLOAD = [\"model.download-remove\"] as const satisfies Capability[];\nexport const TFMP_MODEL_SEARCH = [\"model.search\"] as const satisfies Capability[];\nexport const TFMP_MODEL_INFO = [\"model.info\"] as const satisfies Capability[];\n\nexport const TFMP_CAPABILITY_SETS = [\n TFMP_TEXT_EMBEDDING,\n TFMP_TEXT_CLASSIFICATION,\n TFMP_TEXT_LANGUAGE_DETECTION,\n TFMP_IMAGE_CLASSIFICATION,\n TFMP_IMAGE_EMBEDDING,\n TFMP_IMAGE_SEGMENTATION,\n TFMP_IMAGE_OBJECT_DETECTION,\n TFMP_VISION_FACE_DETECTION,\n TFMP_VISION_FACE_LANDMARKS,\n TFMP_VISION_HAND_LANDMARKS,\n TFMP_VISION_POSE_LANDMARKS,\n TFMP_VISION_GESTURE,\n TFMP_MODEL_DOWNLOAD,\n TFMP_MODEL_UNLOAD,\n TFMP_MODEL_SEARCH,\n TFMP_MODEL_INFO,\n] as const;\n",
8
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ModelDownloadTaskRunInput,\n ModelDownloadTaskRunOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksTextSDK, loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport type { TaskInstance } from \"./TFMP_Runtime\";\nimport { getModelTask, wasm_reference_counts } from \"./TFMP_Runtime\";\n\n/**\n * Core implementation for downloading a TensorFlow MediaPipe model. Resolves\n * the pipeline-specific SDK class, materialises the task via\n * {@link getModelTask}, then immediately closes it to release the WASM\n * reference acquired during load — the download itself is the purpose; we\n * don't keep the task alive.\n *\n * Real download progress (0..1, with messages like \"Loading WASM task\" /\n * \"Creating model task\") is forwarded via the `emit` callback passed to\n * {@link getModelTask}. The {@link StreamProcessor} consumer re-translates each\n * phase event into task-level `onProgress(percent, message)` callbacks.\n */\nexport const TFMP_Download: AiProviderRunFn<\n ModelDownloadTaskRunInput,\n ModelDownloadTaskRunOutput,\n TFMPModelConfig\n> = async (input, model, signal, emit) => {\n const pipeline = model?.provider_config.pipeline;\n let task: TaskInstance;\n switch (pipeline) {\n case \"text-embedder\": {\n const { TextEmbedder } = await loadTfmpTasksTextSDK();\n task = await getModelTask(model!, {}, emit, signal, TextEmbedder);\n break;\n }\n case \"text-classifier\": {\n const { TextClassifier } = await loadTfmpTasksTextSDK();\n task = await getModelTask(model!, {}, emit, signal, TextClassifier);\n break;\n }\n case \"text-language-detector\": {\n const { LanguageDetector } = await loadTfmpTasksTextSDK();\n task = await getModelTask(model!, {}, emit, signal, LanguageDetector);\n break;\n }\n case \"vision-image-classifier\": {\n const { ImageClassifier } = await loadTfmpTasksVisionSDK();\n task = await getModelTask(model!, {}, emit, signal, ImageClassifier);\n break;\n }\n case \"vision-image-embedder\": {\n const { ImageEmbedder } = await loadTfmpTasksVisionSDK();\n task = await getModelTask(model!, {}, emit, signal, ImageEmbedder);\n break;\n }\n case \"vision-image-segmenter\": {\n const { ImageSegmenter } = await loadTfmpTasksVisionSDK();\n task = await getModelTask(model!, {}, emit, signal, ImageSegmenter);\n break;\n }\n case \"vision-object-detector\": {\n const { ObjectDetector } = await loadTfmpTasksVisionSDK();\n task = await getModelTask(model!, {}, emit, signal, ObjectDetector);\n break;\n }\n case \"vision-face-detector\": {\n const { FaceDetector } = await loadTfmpTasksVisionSDK();\n task = await getModelTask(model!, {}, emit, signal, FaceDetector);\n break;\n }\n case \"vision-face-landmarker\": {\n const { FaceLandmarker } = await loadTfmpTasksVisionSDK();\n task = await getModelTask(model!, {}, emit, signal, FaceLandmarker);\n break;\n }\n case \"vision-gesture-recognizer\": {\n const { GestureRecognizer } = await loadTfmpTasksVisionSDK();\n task = await getModelTask(model!, {}, emit, signal, GestureRecognizer);\n break;\n }\n case \"vision-hand-landmarker\": {\n const { HandLandmarker } = await loadTfmpTasksVisionSDK();\n task = await getModelTask(model!, {}, emit, signal, HandLandmarker);\n break;\n }\n case \"vision-pose-landmarker\": {\n const { PoseLandmarker } = await loadTfmpTasksVisionSDK();\n task = await getModelTask(model!, {}, emit, signal, PoseLandmarker);\n break;\n }\n default:\n throw new PermanentJobError(\n `Invalid pipeline: ${pipeline}. Supported pipelines: text-embedder, text-classifier, text-language-detector, vision-image-classifier, vision-image-embedder, vision-image-segmenter, vision-object-detector, vision-face-detector, vision-face-landmarker, vision-gesture-recognizer, vision-hand-landmarker, vision-pose-landmarker`\n );\n }\n\n emit({ type: \"phase\", message: \"Pipeline loaded\", progress: 0.9 });\n task.close();\n const task_engine = model!.provider_config.task_engine!;\n wasm_reference_counts.set(task_engine, wasm_reference_counts.get(task_engine)! - 1);\n\n emit({ type: \"finish\", data: { model: input.model } });\n};\n",
9
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport type { StreamPhase } from \"@workglow/task-graph\";\nimport { loadTfmpTasksTextSDK, loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\n\nexport interface TFMPWasmFileset {\n readonly wasmLoaderPath: string;\n readonly wasmBinaryPath: string;\n readonly assetLoaderPath?: string;\n readonly assetBinaryPath?: string;\n}\n\nexport const wasm_tasks = new Map<string, TFMPWasmFileset>();\nexport const wasm_reference_counts = new Map<string, number>();\n\ntype TaskConstructor = {\n createFromOptions(\n wasmFileset: TFMPWasmFileset,\n options: Record<string, unknown>\n ): Promise<TaskInstance>;\n};\n\nexport type TaskInstance = {\n close(): void;\n [key: string]: any;\n};\n\nexport interface CachedModelTask {\n readonly task: TaskInstance;\n readonly options: Record<string, unknown>;\n readonly task_engine: string;\n}\n\nexport const modelTaskCache = new Map<string, CachedModelTask[]>();\n\nconst optionsMatch = (opts1: Record<string, unknown>, opts2: Record<string, unknown>): boolean => {\n const keys1 = Object.keys(opts1).sort();\n const keys2 = Object.keys(opts2).sort();\n\n if (keys1.length !== keys2.length) return false;\n\n return keys1.every((key) => {\n const val1 = opts1[key];\n const val2 = opts2[key];\n\n if (Array.isArray(val1) && Array.isArray(val2)) {\n return JSON.stringify(val1) === JSON.stringify(val2);\n }\n\n return val1 === val2;\n });\n};\n\nconst getWasmTask = async (\n model: TFMPModelConfig,\n emit: (event: StreamPhase) => void,\n signal: AbortSignal\n): Promise<TFMPWasmFileset> => {\n const task_engine = model.provider_config.task_engine;\n\n if (wasm_tasks.has(task_engine)) {\n return wasm_tasks.get(task_engine)!;\n }\n\n if (signal.aborted) {\n throw new PermanentJobError(\"Aborted job\");\n }\n\n emit({ type: \"phase\", message: \"Loading WASM task\", progress: 0.1 });\n\n let wasmFileset: TFMPWasmFileset;\n\n switch (task_engine) {\n case \"vision\": {\n const { FilesetResolver } = await loadTfmpTasksVisionSDK();\n wasmFileset = await FilesetResolver.forVisionTasks(\n \"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm\"\n );\n break;\n }\n case \"text\": {\n const { FilesetResolver } = await loadTfmpTasksTextSDK();\n wasmFileset = await FilesetResolver.forTextTasks(\n \"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-text@latest/wasm\"\n );\n break;\n }\n case \"audio\": {\n const { FilesetResolver } = await loadTfmpTasksTextSDK();\n wasmFileset = await FilesetResolver.forAudioTasks(\n \"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-audio@latest/wasm\"\n );\n break;\n }\n case \"genai\": {\n const { FilesetResolver } = await loadTfmpTasksTextSDK();\n wasmFileset = await FilesetResolver.forGenAiTasks(\n \"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai@latest/wasm\"\n );\n break;\n }\n default:\n throw new PermanentJobError(\"Invalid task engine\");\n }\n\n wasm_tasks.set(task_engine, wasmFileset);\n return wasmFileset;\n};\n\nexport const getModelTask = async (\n model: TFMPModelConfig,\n options: Record<string, unknown>,\n emit: (event: StreamPhase) => void,\n signal: AbortSignal,\n TaskType: TaskConstructor\n): Promise<any> => {\n const model_path = model.provider_config.model_path;\n const task_engine = model.provider_config.task_engine;\n\n const cachedTasks = modelTaskCache.get(model_path);\n if (cachedTasks) {\n const matchedTask = cachedTasks.find((cached) => optionsMatch(cached.options, options));\n if (matchedTask) {\n return matchedTask.task;\n }\n }\n\n const wasmFileset = await getWasmTask(model, emit, signal);\n\n emit({ type: \"phase\", message: \"Creating model task\", progress: 0.2 });\n\n const task = await TaskType.createFromOptions(wasmFileset, {\n baseOptions: {\n modelAssetPath: model_path,\n },\n ...options,\n });\n\n const cachedTask: CachedModelTask = { task, options, task_engine };\n if (!modelTaskCache.has(model_path)) {\n modelTaskCache.set(model_path, []);\n }\n modelTaskCache.get(model_path)!.push(cachedTask);\n\n wasm_reference_counts.set(task_engine, (wasm_reference_counts.get(task_engine) || 0) + 1);\n\n return task;\n};\n",
10
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRunFn, FaceDetectorTaskInput, FaceDetectorTaskOutput } from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_FaceDetector: AiProviderRunFn<\n FaceDetectorTaskInput,\n FaceDetectorTaskOutput,\n TFMPModelConfig\n> = async (input, model, signal, emit) => {\n const { FaceDetector } = await loadTfmpTasksVisionSDK();\n const faceDetector = await getModelTask(\n model!,\n {\n minDetectionConfidence: input.minDetectionConfidence,\n minSuppressionThreshold: input.minSuppressionThreshold,\n },\n emit,\n signal,\n FaceDetector\n );\n const result = faceDetector.detect(input.image as any);\n\n if (!result.detections) {\n throw new PermanentJobError(\"Failed to detect faces: Empty result\");\n }\n\n const faces = result.detections.map((detection: any) => ({\n box: {\n x: detection.boundingBox?.originX || 0,\n y: detection.boundingBox?.originY || 0,\n width: detection.boundingBox?.width || 0,\n height: detection.boundingBox?.height || 0,\n },\n keypoints:\n detection.keypoints?.map((kp: any) => ({\n x: kp.x,\n y: kp.y,\n label: kp.label,\n })) || [],\n score: detection.categories?.[0]?.score || 0,\n }));\n\n emit({ type: \"finish\", data: { faces } });\n};\n",
11
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n FaceLandmarkerTaskInput,\n FaceLandmarkerTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_FaceLandmarker: AiProviderRunFn<\n FaceLandmarkerTaskInput,\n FaceLandmarkerTaskOutput,\n TFMPModelConfig\n> = async (input, model, signal, emit) => {\n const { FaceLandmarker } = await loadTfmpTasksVisionSDK();\n const faceLandmarker = await getModelTask(\n model!,\n {\n numFaces: input.numFaces,\n minFaceDetectionConfidence: input.minFaceDetectionConfidence,\n minFacePresenceConfidence: input.minFacePresenceConfidence,\n minTrackingConfidence: input.minTrackingConfidence,\n outputFaceBlendshapes: input.outputFaceBlendshapes,\n outputFacialTransformationMatrixes: input.outputFacialTransformationMatrixes,\n },\n emit,\n signal,\n FaceLandmarker\n );\n const result = faceLandmarker.detect(input.image as any);\n\n if (!result.faceLandmarks) {\n throw new PermanentJobError(\"Failed to detect face landmarks: Empty result\");\n }\n\n const faces = result.faceLandmarks.map((landmarks: any, index: number) => {\n const face: any = {\n landmarks: landmarks.map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n })),\n };\n\n if (result.faceBlendshapes && result.faceBlendshapes[index]) {\n face.blendshapes = result.faceBlendshapes[index].categories.map((b: any) => ({\n label: b.categoryName,\n score: b.score,\n }));\n }\n\n if (result.facialTransformationMatrixes && result.facialTransformationMatrixes[index]) {\n face.transformationMatrix = Array.from(result.facialTransformationMatrixes[index].data);\n }\n\n return face;\n });\n\n emit({ type: \"finish\", data: { faces } });\n};\n",
12
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n GestureRecognizerTaskInput,\n GestureRecognizerTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_GestureRecognizer: AiProviderRunFn<\n GestureRecognizerTaskInput,\n GestureRecognizerTaskOutput,\n TFMPModelConfig\n> = async (input, model, signal, emit) => {\n const { GestureRecognizer } = await loadTfmpTasksVisionSDK();\n const gestureRecognizer = await getModelTask(\n model!,\n {\n numHands: input.numHands,\n minHandDetectionConfidence: input.minHandDetectionConfidence,\n minHandPresenceConfidence: input.minHandPresenceConfidence,\n minTrackingConfidence: input.minTrackingConfidence,\n },\n emit,\n signal,\n GestureRecognizer\n );\n const result = gestureRecognizer.recognize(input.image);\n\n if (!result.gestures || !result.landmarks) {\n throw new PermanentJobError(\"Failed to recognize gestures: Empty result\");\n }\n\n const hands = result.gestures.map((gestures: any, index: number) => ({\n gestures: gestures.map((g: any) => ({\n label: g.categoryName,\n score: g.score,\n })),\n handedness: result.handedness[index].map((h: any) => ({\n label: h.categoryName,\n score: h.score,\n })),\n landmarks: result.landmarks[index].map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n })),\n worldLandmarks: result.worldLandmarks[index].map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n })),\n }));\n\n emit({ type: \"finish\", data: { hands } });\n};\n",
13
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n HandLandmarkerTaskInput,\n HandLandmarkerTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_HandLandmarker: AiProviderRunFn<\n HandLandmarkerTaskInput,\n HandLandmarkerTaskOutput,\n TFMPModelConfig\n> = async (input, model, signal, emit) => {\n const { HandLandmarker } = await loadTfmpTasksVisionSDK();\n const handLandmarker = await getModelTask(\n model!,\n {\n numHands: input.numHands,\n minHandDetectionConfidence: input.minHandDetectionConfidence,\n minHandPresenceConfidence: input.minHandPresenceConfidence,\n minTrackingConfidence: input.minTrackingConfidence,\n },\n emit,\n signal,\n HandLandmarker\n );\n const result = handLandmarker.detect(input.image);\n\n if (!result.landmarks) {\n throw new PermanentJobError(\"Failed to detect hand landmarks: Empty result\");\n }\n\n const hands = result.landmarks.map((landmarks: any, index: number) => ({\n handedness: result.handedness[index].map((h: any) => ({\n label: h.categoryName,\n score: h.score,\n })),\n landmarks: landmarks.map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n })),\n worldLandmarks: result.worldLandmarks[index].map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n })),\n }));\n\n emit({ type: \"finish\", data: { hands } });\n};\n",
14
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ImageClassificationTaskInput,\n ImageClassificationTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_ImageClassification: AiProviderRunFn<\n ImageClassificationTaskInput,\n ImageClassificationTaskOutput,\n TFMPModelConfig\n> = async (input, model, signal, emit) => {\n const { ImageClassifier } = await loadTfmpTasksVisionSDK();\n const imageClassifier = await getModelTask(\n model!,\n {\n maxResults: input.maxCategories,\n },\n emit,\n signal,\n ImageClassifier\n );\n const result = imageClassifier.classify(input.image);\n\n if (!result.classifications?.[0]?.categories) {\n throw new PermanentJobError(\"Failed to classify image: Empty result\");\n }\n\n const categories = result.classifications[0].categories.map(\n (category: { categoryName: string; score: number }) => ({\n label: category.categoryName,\n score: category.score,\n })\n );\n\n emit({ type: \"finish\", data: { categories } });\n};\n",
15
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ImageEmbeddingTaskInput,\n ImageEmbeddingTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_ImageEmbedding: AiProviderRunFn<\n ImageEmbeddingTaskInput,\n ImageEmbeddingTaskOutput,\n TFMPModelConfig\n> = async (input, model, signal, emit) => {\n const { ImageEmbedder } = await loadTfmpTasksVisionSDK();\n const imageEmbedder = await getModelTask(model!, {}, emit, signal, ImageEmbedder);\n\n if (Array.isArray(input.image)) {\n const vectors: Float32Array[] = [];\n for (const image of input.image) {\n const result = imageEmbedder.embed(image as any);\n if (!result.embeddings?.[0]?.floatEmbedding) {\n throw new PermanentJobError(\"Failed to generate embedding: Empty result\");\n }\n vectors.push(Float32Array.from(result.embeddings[0].floatEmbedding));\n }\n emit({ type: \"finish\", data: { vector: vectors } as ImageEmbeddingTaskOutput });\n return;\n }\n\n const result = imageEmbedder.embed(input.image as any);\n\n if (!result.embeddings?.[0]?.floatEmbedding) {\n throw new PermanentJobError(\"Failed to generate embedding: Empty result\");\n }\n\n const embedding = Float32Array.from(result.embeddings[0].floatEmbedding);\n\n emit({ type: \"finish\", data: { vector: embedding } as ImageEmbeddingTaskOutput });\n};\n",
16
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ImageSegmentationTaskInput,\n ImageSegmentationTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_ImageSegmentation: AiProviderRunFn<\n ImageSegmentationTaskInput,\n ImageSegmentationTaskOutput,\n TFMPModelConfig\n> = async (input, model, signal, emit) => {\n const { ImageSegmenter } = await loadTfmpTasksVisionSDK();\n const imageSegmenter = await getModelTask(model!, {}, emit, signal, ImageSegmenter);\n const result = imageSegmenter.segment(input.image as any);\n\n if (!result.categoryMask) {\n throw new PermanentJobError(\"Failed to segment image: Empty result\");\n }\n\n const masks = [\n {\n label: \"segment\",\n score: 1.0,\n mask: {\n data: result.categoryMask.canvas,\n width: result.categoryMask.width,\n height: result.categoryMask.height,\n },\n },\n ];\n\n emit({ type: \"finish\", data: { masks } });\n};\n",
17
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRunFn, ModelInfoTaskInput, ModelInfoTaskOutput } from \"@workglow/ai\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { modelTaskCache } from \"./TFMP_Runtime\";\n\n/** Known MediaPipe embedding model dimensions. */\nconst TFMP_EMBEDDING_DIMENSIONS: Record<string, { native_dimensions: number; mrl: boolean }> = {\n \"universal-sentence-encoder\": { native_dimensions: 512, mrl: false },\n};\n\nexport const TFMP_ModelInfo: AiProviderRunFn<\n ModelInfoTaskInput,\n ModelInfoTaskOutput,\n TFMPModelConfig\n> = async (input, model, _signal, emit) => {\n if (input.detail === \"dimensions\") {\n const pc = model?.provider_config as Record<string, unknown>;\n let native_dimensions =\n typeof pc?.native_dimensions === \"number\" ? pc.native_dimensions : undefined;\n const mrl = typeof pc?.mrl === \"boolean\" ? pc.mrl : false;\n if (native_dimensions === undefined) {\n const modelPath = (pc?.model_path as string) ?? \"\";\n const known = TFMP_EMBEDDING_DIMENSIONS[modelPath];\n if (known) {\n native_dimensions = known.native_dimensions;\n }\n }\n emit({\n type: \"finish\",\n data: {\n model: input.model,\n is_local: true,\n is_remote: false,\n supports_browser: true,\n supports_node: false,\n is_cached: false,\n is_loaded: false,\n file_sizes: null,\n ...(native_dimensions !== undefined ? { native_dimensions } : {}),\n ...(mrl ? { mrl } : {}),\n },\n });\n return;\n }\n\n const model_path = model!.provider_config.model_path;\n const is_loaded = modelTaskCache.has(model_path);\n\n emit({\n type: \"finish\",\n data: {\n model: input.model,\n is_local: true,\n is_remote: false,\n supports_browser: true,\n supports_node: false,\n is_cached: is_loaded,\n is_loaded,\n file_sizes: null,\n },\n });\n};\n",
18
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ModelSearchResultItem,\n ModelSearchTaskInput,\n ModelSearchTaskOutput,\n} from \"@workglow/ai\";\nimport { filterModelSearchResultsByQuery } from \"@workglow/ai/provider-utils\";\nimport { TENSORFLOW_MEDIAPIPE } from \"./TFMP_Constants\";\n\nconst TFMP_MODEL_RESULTS: ModelSearchResultItem[] = [\n {\n id: \"universal-sentence-encoder\",\n label: \"Universal Sentence Encoder\",\n description: \"Text embedding model\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"Universal Sentence Encoder\",\n description: \"Universal Sentence Encoder\",\n capabilities: [\"text.embedding\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-tasks/text_embedder/universal_sentence_encoder.tflite\",\n task_engine: \"text\",\n pipeline: \"text-embedder\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"language-detector\",\n label: \"MediaPipe Language Detector\",\n description: \"Language detection model\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"MediaPipe Language Detector\",\n description: \"MediaPipe Language Detector\",\n capabilities: [\"text.language-detection\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-models/language_detector/language_detector/float32/latest/language_detector.tflite\",\n task_engine: \"text\",\n pipeline: \"text-language-detector\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"bert-text-classifier\",\n label: \"MediaPipe BERT Text Classifier\",\n description: \"Text classification model\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"MediaPipe BERT Text Classifier\",\n description: \"MediaPipe BERT Text Classifier\",\n capabilities: [\"text.classification\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-tasks/text_classifier/bert_text_classifier.tflite\",\n task_engine: \"text\",\n pipeline: \"text-classifier\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"image-embedder\",\n label: \"MediaPipe Image Embedder\",\n description: \"Image embedding model\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"MediaPipe Image Embedder\",\n description: \"MediaPipe Image Embedder\",\n capabilities: [\"image.embedding\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-models/image_embedder/mobilenet_v3_small/float32/1/mobilenet_v3_small.tflite\",\n task_engine: \"vision\",\n pipeline: \"vision-image-embedder\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"efficientnet-lite0\",\n label: \"EfficientNet Lite0\",\n description: \"Image classification model\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"EfficientNet Lite0\",\n description: \"Image classification model\",\n capabilities: [\"image.classification\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-models/image_classifier/efficientnet_lite0/float32/1/efficientnet_lite0.tflite\",\n task_engine: \"vision\",\n pipeline: \"vision-image-classifier\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"efficientdet-lite0\",\n label: \"Efficient Object Detector Lite0\",\n description: \"Object detection model\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"Efficient Object Detector Lite0\",\n description: \"Object detection model\",\n capabilities: [\"image.object-detection\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-models/object_detector/efficientdet_lite0/float32/1/efficientdet_lite0.tflite\",\n task_engine: \"vision\",\n pipeline: \"vision-object-detector\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"deeplabv3\",\n label: \"Efficient Image Segmenter Lite0\",\n description: \"Image segmentation model\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"Efficient Image Segmenter Lite0\",\n description: \"Image segmentation model\",\n capabilities: [\"image.segmentation\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-assets/deeplabv3.tflite?generation=1661875711618421\",\n task_engine: \"vision\",\n pipeline: \"vision-image-segmenter\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"face-landmarker\",\n label: \"Face Landmarker\",\n description: \"Detects 478 facial landmarks with blendshapes\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"Face Landmarker\",\n description: \"Detects 478 facial landmarks with blendshapes\",\n capabilities: [\"vision.face-landmarks\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/1/face_landmarker.task\",\n task_engine: \"vision\",\n pipeline: \"vision-face-landmarker\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"gesture-recognizer\",\n label: \"Gesture Recognizer\",\n description: \"Recognizes hand gestures such as thumbs up and victory\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"Gesture Recognizer\",\n description: \"Recognizes hand gestures such as thumbs up and victory\",\n capabilities: [\"vision.gesture\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-models/gesture_recognizer/gesture_recognizer/float16/1/gesture_recognizer.task\",\n task_engine: \"vision\",\n pipeline: \"vision-gesture-recognizer\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"hand-landmarker\",\n label: \"Hand Landmarker\",\n description: \"Detects 21 hand landmarks\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"Hand Landmarker\",\n description: \"Detects 21 hand landmarks\",\n capabilities: [\"vision.hand-landmarks\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-models/hand_landmarker/hand_landmarker/float16/1/hand_landmarker.task\",\n task_engine: \"vision\",\n pipeline: \"vision-hand-landmarker\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n {\n id: \"pose-landmarker\",\n label: \"Pose Landmarker\",\n description: \"Detects 33 body pose landmarks\",\n record: {\n provider: TENSORFLOW_MEDIAPIPE,\n title: \"Pose Landmarker\",\n description: \"Detects 33 body pose landmarks\",\n capabilities: [\"vision.pose-landmarks\"],\n provider_config: {\n model_path:\n \"https://storage.googleapis.com/mediapipe-models/pose_landmarker/pose_landmarker_lite/float16/1/pose_landmarker_lite.task\",\n task_engine: \"vision\",\n pipeline: \"vision-pose-landmarker\",\n },\n metadata: {},\n },\n raw: { source: \"mediapipe\" },\n },\n];\n\nexport function createTFMPModelSearch(\n providerId: string\n): AiProviderRunFn<ModelSearchTaskInput, ModelSearchTaskOutput> {\n return async (input, _model, _signal, emit) => {\n const results = filterModelSearchResultsByQuery(\n TFMP_MODEL_RESULTS.map((result) => ({\n ...result,\n record: { ...result.record, provider: providerId },\n })),\n input.query\n );\n emit({ type: \"finish\", data: { results } });\n };\n}\n\nexport const TFMP_ModelSearch: AiProviderRunFn<ModelSearchTaskInput, ModelSearchTaskOutput> =\n createTFMPModelSearch(TENSORFLOW_MEDIAPIPE);\n",
19
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const TENSORFLOW_MEDIAPIPE = \"TENSORFLOW_MEDIAPIPE\";\n\nexport const TFMP_DEFAULT_TASK_TYPES = [\n \"ModelDownloadTask\",\n \"ModelDownloadRemoveTask\",\n \"ModelInfoTask\",\n \"TextEmbeddingTask\",\n \"TextLanguageDetectionTask\",\n \"TextClassificationTask\",\n \"ImageSegmentationTask\",\n \"ImageEmbeddingTask\",\n \"ImageClassificationTask\",\n \"ObjectDetectionTask\",\n \"GestureRecognizerTask\",\n \"HandLandmarkerTask\",\n \"FaceDetectorTask\",\n \"FaceLandmarkerTask\",\n \"PoseLandmarkerTask\",\n \"ModelSearchTask\",\n] as const;\n\nexport type TextPipelineTask =\n | \"text-embedder\"\n | \"text-classifier\"\n | \"text-language-detector\"\n | \"genai-text\"\n | \"audio-classifier\"\n | \"audio-embedder\"\n | \"vision-face-detector\"\n | \"vision-face-landmarker\"\n | \"vision-face-stylizer\"\n | \"vision-gesture-recognizer\"\n | \"vision-hand-landmarker\"\n | \"vision-holistic-landmarker\"\n | \"vision-image-classifier\"\n | \"vision-image-embedder\"\n | \"vision-image-segmenter\"\n | \"vision-image-interactive-segmenter\"\n | \"vision-object-detector\"\n | \"vision-pose-landmarker\";\n\nexport const TextPipelineTask = {\n \"text-embedder\": \"text-embedder\",\n \"text-classifier\": \"text-classifier\",\n \"text-language-detector\": \"text-language-detector\",\n \"genai-text\": \"genai-text\",\n \"audio-classifier\": \"audio-classifier\",\n \"audio-embedder\": \"audio-embedder\",\n \"vision-face-detector\": \"vision-face-detector\",\n \"vision-face-landmarker\": \"vision-face-landmarker\",\n \"vision-face-stylizer\": \"vision-face-stylizer\",\n \"vision-gesture-recognizer\": \"vision-gesture-recognizer\",\n \"vision-hand-landmarker\": \"vision-hand-landmarker\",\n \"vision-holistic-landmarker\": \"vision-holistic-landmarker\",\n \"vision-image-classifier\": \"vision-image-classifier\",\n \"vision-image-embedder\": \"vision-image-embedder\",\n \"vision-image-segmenter\": \"vision-image-segmenter\",\n \"vision-image-interactive-segmenter\": \"vision-image-interactive-segmenter\",\n \"vision-object-detector\": \"vision-object-detector\",\n \"vision-pose-landmarker\": \"vision-pose-landmarker\",\n} as const satisfies Record<TextPipelineTask, TextPipelineTask>;\n",
20
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ObjectDetectionTaskInput,\n ObjectDetectionTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_ObjectDetection: AiProviderRunFn<\n ObjectDetectionTaskInput,\n ObjectDetectionTaskOutput,\n TFMPModelConfig\n> = async (input, model, signal, emit) => {\n const { ObjectDetector } = await loadTfmpTasksVisionSDK();\n const objectDetector = await getModelTask(\n model!,\n {\n scoreThreshold: input.threshold,\n },\n emit,\n signal,\n ObjectDetector\n );\n const result = objectDetector.detect(input.image);\n\n if (!result.detections) {\n throw new PermanentJobError(\"Failed to detect objects: Empty result\");\n }\n\n const detections = result.detections.map((detection: any) => ({\n label: detection.categories?.[0]?.categoryName || \"unknown\",\n score: detection.categories?.[0]?.score || 0,\n box: {\n x: detection.boundingBox?.originX || 0,\n y: detection.boundingBox?.originY || 0,\n width: detection.boundingBox?.width || 0,\n height: detection.boundingBox?.height || 0,\n },\n }));\n\n emit({ type: \"finish\", data: { detections } });\n};\n",
21
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n PoseLandmarkerTaskInput,\n PoseLandmarkerTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_PoseLandmarker: AiProviderRunFn<\n PoseLandmarkerTaskInput,\n PoseLandmarkerTaskOutput,\n TFMPModelConfig\n> = async (input, model, signal, emit) => {\n const { PoseLandmarker } = await loadTfmpTasksVisionSDK();\n const poseLandmarker = await getModelTask(\n model!,\n {\n numPoses: input.numPoses,\n minPoseDetectionConfidence: input.minPoseDetectionConfidence,\n minPosePresenceConfidence: input.minPosePresenceConfidence,\n minTrackingConfidence: input.minTrackingConfidence,\n outputSegmentationMasks: input.outputSegmentationMasks,\n },\n emit,\n signal,\n PoseLandmarker\n );\n const result = poseLandmarker.detect(input.image);\n\n if (!result.landmarks) {\n throw new PermanentJobError(\"Failed to detect pose landmarks: Empty result\");\n }\n\n const poses = result.landmarks.map((landmarks: any, index: number) => {\n const pose: any = {\n landmarks: landmarks.map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n visibility: l.visibility,\n presence: l.presence,\n })),\n worldLandmarks: result.worldLandmarks[index].map((l: any) => ({\n x: l.x,\n y: l.y,\n z: l.z,\n visibility: l.visibility,\n presence: l.presence,\n })),\n };\n\n if (result.segmentationMasks && result.segmentationMasks[index]) {\n const mask = result.segmentationMasks[index];\n pose.segmentationMask = {\n data: mask.canvas || mask,\n width: mask.width,\n height: mask.height,\n };\n }\n\n return pose;\n });\n\n emit({ type: \"finish\", data: { poses } });\n};\n",
22
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n TextClassificationTaskInput,\n TextClassificationTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksTextSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_TextClassification: AiProviderRunFn<\n TextClassificationTaskInput,\n TextClassificationTaskOutput,\n TFMPModelConfig\n> = async (input, model, signal, emit) => {\n const { TextClassifier } = await loadTfmpTasksTextSDK();\n const TextClassification = await getModelTask(\n model!,\n {\n maxCategories: input.maxCategories,\n },\n emit,\n signal,\n TextClassifier\n );\n const result = TextClassification.classify(input.text);\n\n if (!result.classifications?.[0]?.categories) {\n throw new PermanentJobError(\"Failed to classify text: Empty result\");\n }\n\n const categories = result.classifications[0].categories.map((category: any) => ({\n label: category.categoryName,\n score: category.score,\n }));\n\n emit({ type: \"finish\", data: { categories } });\n};\n",
23
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksTextSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_TextEmbedding: AiProviderRunFn<\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n TFMPModelConfig\n> = async (input, model, signal, emit) => {\n const { TextEmbedder } = await loadTfmpTasksTextSDK();\n const textEmbedder = await getModelTask(model!, {}, emit, signal, TextEmbedder);\n\n if (Array.isArray(input.text)) {\n const embeddings = input.text.map((text) => {\n const result = textEmbedder.embed(text);\n\n if (!result.embeddings?.[0]?.floatEmbedding) {\n throw new PermanentJobError(\"Failed to generate embedding: Empty result\");\n }\n\n return Float32Array.from(result.embeddings[0].floatEmbedding);\n });\n\n emit({ type: \"finish\", data: { vector: embeddings } });\n return;\n }\n\n const result = textEmbedder.embed(input.text);\n\n if (!result.embeddings?.[0]?.floatEmbedding) {\n throw new PermanentJobError(\"Failed to generate embedding: Empty result\");\n }\n\n const embedding = Float32Array.from(result.embeddings[0].floatEmbedding);\n\n emit({ type: \"finish\", data: { vector: embedding } });\n};\n",
24
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n TextLanguageDetectionTaskInput,\n TextLanguageDetectionTaskOutput,\n} from \"@workglow/ai\";\nimport { PermanentJobError } from \"@workglow/job-queue\";\nimport { loadTfmpTasksTextSDK } from \"./TFMP_Client\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { getModelTask } from \"./TFMP_Runtime\";\n\nexport const TFMP_TextLanguageDetection: AiProviderRunFn<\n TextLanguageDetectionTaskInput,\n TextLanguageDetectionTaskOutput,\n TFMPModelConfig\n> = async (input, model, signal, emit) => {\n const maxLanguages = input.maxLanguages === 0 ? -1 : input.maxLanguages;\n\n const { LanguageDetector } = await loadTfmpTasksTextSDK();\n const textLanguageDetector = await getModelTask(\n model!,\n {\n maxLanguages,\n },\n emit,\n signal,\n LanguageDetector\n );\n const result = textLanguageDetector.detect(input.text);\n\n if (!result.languages?.[0]?.languageCode) {\n throw new PermanentJobError(\"Failed to detect language: Empty result\");\n }\n\n const languages = result.languages.map((language: any) => ({\n language: language.languageCode,\n score: language.probability,\n }));\n\n emit({ type: \"finish\", data: { languages } });\n};\n",
25
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ModelDownloadRemoveTaskRunInput,\n ModelDownloadRemoveTaskRunOutput,\n} from \"@workglow/ai\";\nimport { TFMPModelConfig } from \"./TFMP_ModelSchema\";\nimport { modelTaskCache, wasm_reference_counts, wasm_tasks } from \"./TFMP_Runtime\";\n\nexport const TFMP_Unload: AiProviderRunFn<\n ModelDownloadRemoveTaskRunInput,\n ModelDownloadRemoveTaskRunOutput,\n TFMPModelConfig\n> = async (input, model, _signal, emit) => {\n const model_path = model!.provider_config.model_path;\n if (modelTaskCache.has(model_path)) {\n const cachedTasks = modelTaskCache.get(model_path)!;\n\n for (const cachedTask of cachedTasks) {\n const task = cachedTask.task;\n if (\"close\" in task && typeof task.close === \"function\") task.close();\n\n const task_engine = cachedTask.task_engine;\n const currentCount = wasm_reference_counts.get(task_engine) || 0;\n const newCount = currentCount - 1;\n\n if (newCount <= 0) {\n wasm_tasks.delete(task_engine);\n wasm_reference_counts.delete(task_engine);\n } else {\n wasm_reference_counts.set(task_engine, newCount);\n }\n }\n\n modelTaskCache.delete(model_path);\n }\n\n emit({ type: \"finish\", data: { model: input.model } });\n};\n",
26
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRunFnRegistration } from \"@workglow/ai\";\nimport {\n TFMP_IMAGE_CLASSIFICATION,\n TFMP_IMAGE_EMBEDDING,\n TFMP_IMAGE_OBJECT_DETECTION,\n TFMP_IMAGE_SEGMENTATION,\n TFMP_MODEL_DOWNLOAD,\n TFMP_MODEL_INFO,\n TFMP_MODEL_SEARCH,\n TFMP_MODEL_UNLOAD,\n TFMP_TEXT_CLASSIFICATION,\n TFMP_TEXT_EMBEDDING,\n TFMP_TEXT_LANGUAGE_DETECTION,\n TFMP_VISION_FACE_DETECTION,\n TFMP_VISION_FACE_LANDMARKS,\n TFMP_VISION_GESTURE,\n TFMP_VISION_HAND_LANDMARKS,\n TFMP_VISION_POSE_LANDMARKS,\n} from \"./TFMP_CapabilitySets\";\nimport type { TFMPModelConfig } from \"./TFMP_ModelSchema\";\n\nimport { TFMP_Download } from \"./TFMP_Download\";\nimport { TFMP_FaceDetector } from \"./TFMP_FaceDetector\";\nimport { TFMP_FaceLandmarker } from \"./TFMP_FaceLandmarker\";\nimport { TFMP_GestureRecognizer } from \"./TFMP_GestureRecognizer\";\nimport { TFMP_HandLandmarker } from \"./TFMP_HandLandmarker\";\nimport { TFMP_ImageClassification } from \"./TFMP_ImageClassification\";\nimport { TFMP_ImageEmbedding } from \"./TFMP_ImageEmbedding\";\nimport { TFMP_ImageSegmentation } from \"./TFMP_ImageSegmentation\";\nimport { TFMP_ModelInfo } from \"./TFMP_ModelInfo\";\nimport { TFMP_ModelSearch } from \"./TFMP_ModelSearch\";\nimport { TFMP_ObjectDetection } from \"./TFMP_ObjectDetection\";\nimport { TFMP_PoseLandmarker } from \"./TFMP_PoseLandmarker\";\nimport { TFMP_TextClassification } from \"./TFMP_TextClassification\";\nimport { TFMP_TextEmbedding } from \"./TFMP_TextEmbedding\";\nimport { TFMP_TextLanguageDetection } from \"./TFMP_TextLanguageDetection\";\nimport { TFMP_Unload } from \"./TFMP_Unload\";\n\nexport { loadTfmpTasksTextSDK, loadTfmpTasksVisionSDK } from \"./TFMP_Client\";\n\n/**\n * Capability-set run-fn registrations for TensorFlow MediaPipe.\n *\n * All TFMP inference ops are one-shot run-fns that emit a single `finish` event.\n * {@link ModelDownloadTask} (`[\"model.download\"]`) reports real download progress\n * via `phase` events emitted directly from {@link getModelTask}.\n */\nexport const TFMP_RUN_FNS: readonly AiProviderRunFnRegistration<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n TFMPModelConfig\n>[] = [\n { serves: TFMP_TEXT_EMBEDDING, runFn: TFMP_TextEmbedding },\n { serves: TFMP_TEXT_CLASSIFICATION, runFn: TFMP_TextClassification },\n { serves: TFMP_TEXT_LANGUAGE_DETECTION, runFn: TFMP_TextLanguageDetection },\n { serves: TFMP_IMAGE_CLASSIFICATION, runFn: TFMP_ImageClassification },\n { serves: TFMP_IMAGE_EMBEDDING, runFn: TFMP_ImageEmbedding },\n { serves: TFMP_IMAGE_SEGMENTATION, runFn: TFMP_ImageSegmentation },\n { serves: TFMP_IMAGE_OBJECT_DETECTION, runFn: TFMP_ObjectDetection },\n { serves: TFMP_VISION_FACE_DETECTION, runFn: TFMP_FaceDetector },\n { serves: TFMP_VISION_FACE_LANDMARKS, runFn: TFMP_FaceLandmarker },\n { serves: TFMP_VISION_HAND_LANDMARKS, runFn: TFMP_HandLandmarker },\n { serves: TFMP_VISION_POSE_LANDMARKS, runFn: TFMP_PoseLandmarker },\n { serves: TFMP_VISION_GESTURE, runFn: TFMP_GestureRecognizer },\n { serves: TFMP_MODEL_DOWNLOAD, runFn: TFMP_Download },\n { serves: TFMP_MODEL_UNLOAD, runFn: TFMP_Unload },\n { serves: TFMP_MODEL_SEARCH, runFn: TFMP_ModelSearch },\n { serves: TFMP_MODEL_INFO, runFn: TFMP_ModelInfo },\n];\n",
27
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AiProvider } from \"@workglow/ai\";\nimport type {\n AiProviderPreviewRunFn,\n AiProviderRunFnRegistration,\n Capability,\n ModelRecord,\n} from \"@workglow/ai\";\nimport { TENSORFLOW_MEDIAPIPE } from \"./common/TFMP_Constants\";\nimport { inferTfmpCapabilities, tfmpWorkerRunFnSpecs } from \"./common/TFMP_Capabilities\";\nimport type { TFMPModelConfig } from \"./common/TFMP_ModelSchema\";\n\n/** Main-thread registration (inline or worker-backed). WASM-only — uses direct execution. */\nexport class TensorFlowMediaPipeQueuedProvider extends AiProvider<TFMPModelConfig> {\n readonly name = TENSORFLOW_MEDIAPIPE;\n readonly displayName = \"TensorFlow MediaPipe\";\n readonly isLocal = true;\n readonly supportsBrowser = true;\n\n constructor(\n promiseRunFns?: readonly AiProviderRunFnRegistration<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n TFMPModelConfig\n >[],\n previewTasks?: Record<\n string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n AiProviderPreviewRunFn<any, any, TFMPModelConfig>\n >\n ) {\n super(promiseRunFns, previewTasks);\n }\n\n override inferCapabilities(model: ModelRecord): readonly Capability[] {\n return inferTfmpCapabilities(model);\n }\n\n protected override workerRunFnSpecs(): readonly { serves: readonly Capability[] }[] {\n return tfmpWorkerRunFnSpecs();\n }\n}\n",
28
+ "/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Capability, ModelRecord } from \"@workglow/ai/worker\";\nimport { TFMP_CAPABILITY_SETS } from \"./TFMP_CapabilitySets\";\n\nexport const TFMP_RUN_FN_SPECS = TFMP_CAPABILITY_SETS.map((serves) => ({ serves }));\n\nexport function tfmpWorkerRunFnSpecs(): readonly { readonly serves: readonly Capability[] }[] {\n return TFMP_RUN_FN_SPECS;\n}\n\ntype CapabilityHints = Pick<ModelRecord, \"model_id\" | \"provider_config\" | \"capabilities\">;\n\n/**\n * Heuristic capability inference for TensorFlow MediaPipe {@link ModelRecord}.\n *\n * MediaPipe ships canonical task-specific model files (e.g. `efficientdet_lite0.tflite`,\n * `gesture_recognizer.task`, `face_landmarker.task`). The model file name typically\n * encodes its specialised task. Declared capabilities (set by model-search) win;\n * fallback inspects the model_path / model name for known MediaPipe filenames.\n */\nexport function inferTfmpCapabilities(model: CapabilityHints): readonly Capability[] {\n const declared = (model.capabilities as readonly Capability[] | undefined) ?? [];\n if (declared.length > 0) return declared;\n\n const id = String(\n model.model_id ??\n (model.provider_config as { model_path?: string; model_name?: string } | undefined)\n ?.model_path ??\n (model.provider_config as { model_name?: string } | undefined)?.model_name ??\n \"\"\n );\n const baseName = (id.split(\"/\").pop() ?? id).toLowerCase();\n\n // Hand landmarker / gesture recognizer share `hand_*` filenames.\n if (/gesture_recognizer/.test(baseName)) {\n return [\n \"vision.gesture\",\n \"vision.hand-landmarks\",\n \"model.download-remove\",\n \"model.info\",\n \"model.search\",\n ];\n }\n if (/hand_landmarker/.test(baseName)) {\n return [\"vision.hand-landmarks\", \"model.download-remove\", \"model.info\", \"model.search\"];\n }\n if (/face_landmarker/.test(baseName)) {\n return [\"vision.face-landmarks\", \"model.download-remove\", \"model.info\", \"model.search\"];\n }\n if (/face_detector|blaze_face/.test(baseName)) {\n return [\"vision.face-detection\", \"model.download-remove\", \"model.info\", \"model.search\"];\n }\n if (/pose_landmarker/.test(baseName)) {\n return [\"vision.pose-landmarks\", \"model.download-remove\", \"model.info\", \"model.search\"];\n }\n if (/object_detector|efficientdet|ssd_mobilenet|yolo/.test(baseName)) {\n return [\"image.object-detection\", \"model.download-remove\", \"model.info\", \"model.search\"];\n }\n if (/segmenter|deeplab|selfie/.test(baseName)) {\n return [\"image.segmentation\", \"model.download-remove\", \"model.info\", \"model.search\"];\n }\n if (/image_classifier|efficientnet|mobilenet/.test(baseName)) {\n return [\"image.classification\", \"model.download-remove\", \"model.info\", \"model.search\"];\n }\n if (/image_embed/.test(baseName)) {\n return [\"image.embedding\", \"model.download-remove\", \"model.info\", \"model.search\"];\n }\n if (/text_embed|universal_sentence_encoder|use_/.test(baseName)) {\n return [\"text.embedding\", \"model.download-remove\", \"model.info\", \"model.search\"];\n }\n if (/text_classifier|bert_classifier/.test(baseName)) {\n return [\"text.classification\", \"model.download-remove\", \"model.info\", \"model.search\"];\n }\n if (/language_detector/.test(baseName)) {\n return [\"text.language-detection\", \"model.download-remove\", \"model.info\", \"model.search\"];\n }\n\n return [\"model.search\", \"model.info\"];\n}\n",
29
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { registerProviderWorker } from \"@workglow/ai/provider-utils\";\nimport { TFMP_RUN_FNS } from \"./common/TFMP_JobRunFns\";\nimport { TensorFlowMediaPipeProvider } from \"./TensorFlowMediaPipeProvider\";\n\nexport async function registerTensorFlowMediaPipeWorker(): Promise<void> {\n await registerProviderWorker(\n (ws) => new TensorFlowMediaPipeProvider(TFMP_RUN_FNS).registerOnWorkerServer(ws),\n \"TensorFlow MediaPipe\"\n );\n}\n",
30
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AiProvider } from \"@workglow/ai/worker\";\nimport type {\n AiProviderPreviewRunFn,\n AiProviderRunFnRegistration,\n Capability,\n ModelRecord,\n} from \"@workglow/ai/worker\";\nimport { TENSORFLOW_MEDIAPIPE } from \"./common/TFMP_Constants\";\nimport { inferTfmpCapabilities, tfmpWorkerRunFnSpecs } from \"./common/TFMP_Capabilities\";\nimport type { TFMPModelConfig } from \"./common/TFMP_ModelSchema\";\n\n/**\n * Worker-server registration for TensorFlow MediaPipe. Imports `AiProvider`\n * from `@workglow/ai/worker` so the SDK is only loaded in the worker.\n */\nexport class TensorFlowMediaPipeProvider extends AiProvider<TFMPModelConfig> {\n readonly name = TENSORFLOW_MEDIAPIPE;\n readonly displayName = \"TensorFlow MediaPipe\";\n readonly isLocal = true;\n readonly supportsBrowser = true;\n\n constructor(\n promiseRunFns?: readonly AiProviderRunFnRegistration<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n any,\n TFMPModelConfig\n >[],\n previewTasks?: Record<\n string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n AiProviderPreviewRunFn<any, any, TFMPModelConfig>\n >\n ) {\n super(promiseRunFns, previewTasks);\n }\n\n override inferCapabilities(model: ModelRecord): readonly Capability[] {\n return inferTfmpCapabilities(model);\n }\n\n protected override workerRunFnSpecs(): readonly { serves: readonly Capability[] }[] {\n return tfmpWorkerRunFnSpecs();\n }\n}\n"
29
31
  ],
30
- "mappings": "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",
31
- "debugId": "CB3FDA3C7C718E4C64756E2164756E21",
32
+ "mappings": "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",
33
+ "debugId": "271A8EDB1D7FB3E564756E2164756E21",
32
34
  "names": []
33
35
  }
package/dist/ai.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,cAAc,YAAY,CAAC"}