@workglow/ai-provider 0.0.122 → 0.0.124
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/provider-anthropic/AnthropicProvider.d.ts +1 -0
- package/dist/provider-anthropic/AnthropicProvider.d.ts.map +1 -1
- package/dist/provider-anthropic/AnthropicQueuedProvider.d.ts +1 -0
- package/dist/provider-anthropic/AnthropicQueuedProvider.d.ts.map +1 -1
- package/dist/provider-anthropic/index.js +2 -1
- package/dist/provider-anthropic/index.js.map +3 -3
- package/dist/provider-anthropic/runtime.js +3 -1
- package/dist/provider-anthropic/runtime.js.map +4 -4
- package/dist/provider-chrome/WebBrowserProvider.d.ts +1 -0
- package/dist/provider-chrome/WebBrowserProvider.d.ts.map +1 -1
- package/dist/provider-chrome/WebBrowserQueuedProvider.d.ts +1 -0
- package/dist/provider-chrome/WebBrowserQueuedProvider.d.ts.map +1 -1
- package/dist/provider-chrome/index.js +2 -1
- package/dist/provider-chrome/index.js.map +3 -3
- package/dist/provider-chrome/runtime.js +3 -1
- package/dist/provider-chrome/runtime.js.map +4 -4
- package/dist/provider-gemini/GoogleGeminiProvider.d.ts +1 -0
- package/dist/provider-gemini/GoogleGeminiProvider.d.ts.map +1 -1
- package/dist/provider-gemini/GoogleGeminiQueuedProvider.d.ts +1 -0
- package/dist/provider-gemini/GoogleGeminiQueuedProvider.d.ts.map +1 -1
- package/dist/provider-gemini/index.js +2 -1
- package/dist/provider-gemini/index.js.map +3 -3
- package/dist/provider-gemini/runtime.js +3 -1
- package/dist/provider-gemini/runtime.js.map +4 -4
- package/dist/provider-hf-inference/HfInferenceProvider.d.ts +1 -0
- package/dist/provider-hf-inference/HfInferenceProvider.d.ts.map +1 -1
- package/dist/provider-hf-inference/HfInferenceQueuedProvider.d.ts +1 -0
- package/dist/provider-hf-inference/HfInferenceQueuedProvider.d.ts.map +1 -1
- package/dist/provider-hf-inference/index.js +2 -1
- package/dist/provider-hf-inference/index.js.map +3 -3
- package/dist/provider-hf-inference/runtime.js +3 -1
- package/dist/provider-hf-inference/runtime.js.map +4 -4
- package/dist/provider-hf-transformers/HuggingFaceTransformersProvider.d.ts +1 -0
- package/dist/provider-hf-transformers/HuggingFaceTransformersProvider.d.ts.map +1 -1
- package/dist/provider-hf-transformers/HuggingFaceTransformersQueuedProvider.d.ts +1 -0
- package/dist/provider-hf-transformers/HuggingFaceTransformersQueuedProvider.d.ts.map +1 -1
- package/dist/provider-hf-transformers/common/HFT_JobRunFns.d.ts +2 -2
- package/dist/provider-hf-transformers/common/HFT_Pipeline.d.ts.map +1 -1
- package/dist/provider-hf-transformers/common/HFT_Streaming.d.ts +3 -2
- package/dist/provider-hf-transformers/common/HFT_Streaming.d.ts.map +1 -1
- package/dist/provider-hf-transformers/common/HFT_ToolCalling.d.ts.map +1 -1
- package/dist/provider-hf-transformers/index.js +3 -1
- package/dist/provider-hf-transformers/index.js.map +4 -4
- package/dist/provider-hf-transformers/runtime.js +59 -39
- package/dist/provider-hf-transformers/runtime.js.map +13 -13
- package/dist/provider-llamacpp/LlamaCppProvider.d.ts +1 -0
- package/dist/provider-llamacpp/LlamaCppProvider.d.ts.map +1 -1
- package/dist/provider-llamacpp/LlamaCppQueuedProvider.d.ts +1 -0
- package/dist/provider-llamacpp/LlamaCppQueuedProvider.d.ts.map +1 -1
- package/dist/provider-llamacpp/common/LlamaCpp_Runtime.d.ts +5 -8
- package/dist/provider-llamacpp/common/LlamaCpp_Runtime.d.ts.map +1 -1
- package/dist/provider-llamacpp/index.js +2 -1
- package/dist/provider-llamacpp/index.js.map +3 -3
- package/dist/provider-llamacpp/runtime.js +3 -1
- package/dist/provider-llamacpp/runtime.js.map +5 -5
- package/dist/provider-ollama/OllamaProvider.d.ts +1 -0
- package/dist/provider-ollama/OllamaProvider.d.ts.map +1 -1
- package/dist/provider-ollama/OllamaQueuedProvider.d.ts +1 -0
- package/dist/provider-ollama/OllamaQueuedProvider.d.ts.map +1 -1
- package/dist/provider-ollama/common/Ollama_JobRunFns.browser.d.ts +1 -1
- package/dist/provider-ollama/common/Ollama_JobRunFns.d.ts +1 -1
- package/dist/provider-ollama/index.browser.js +2 -1
- package/dist/provider-ollama/index.browser.js.map +3 -3
- package/dist/provider-ollama/index.js +2 -1
- package/dist/provider-ollama/index.js.map +3 -3
- package/dist/provider-ollama/runtime.browser.js +3 -1
- package/dist/provider-ollama/runtime.browser.js.map +4 -4
- package/dist/provider-ollama/runtime.js +3 -1
- package/dist/provider-ollama/runtime.js.map +4 -4
- package/dist/provider-openai/OpenAiProvider.d.ts +1 -0
- package/dist/provider-openai/OpenAiProvider.d.ts.map +1 -1
- package/dist/provider-openai/OpenAiQueuedProvider.d.ts +1 -0
- package/dist/provider-openai/OpenAiQueuedProvider.d.ts.map +1 -1
- package/dist/provider-openai/common/OpenAI_CountTokens.browser.d.ts +10 -0
- package/dist/provider-openai/common/OpenAI_CountTokens.browser.d.ts.map +1 -0
- package/dist/provider-openai/common/OpenAI_CountTokens.d.ts.map +1 -1
- package/dist/provider-openai/common/OpenAI_JobRunFns.browser.d.ts +12 -0
- package/dist/provider-openai/common/OpenAI_JobRunFns.browser.d.ts.map +1 -0
- package/dist/provider-openai/index.browser.d.ts +9 -0
- package/dist/provider-openai/index.browser.d.ts.map +1 -0
- package/dist/provider-openai/index.browser.js +106 -0
- package/dist/provider-openai/index.browser.js.map +13 -0
- package/dist/provider-openai/index.js +2 -1
- package/dist/provider-openai/index.js.map +3 -3
- package/dist/provider-openai/registerOpenAiInline.browser.d.ts +8 -0
- package/dist/provider-openai/registerOpenAiInline.browser.d.ts.map +1 -0
- package/dist/provider-openai/registerOpenAiWorker.browser.d.ts +7 -0
- package/dist/provider-openai/registerOpenAiWorker.browser.d.ts.map +1 -0
- package/dist/provider-openai/runtime.browser.d.ts +15 -0
- package/dist/provider-openai/runtime.browser.d.ts.map +1 -0
- package/dist/provider-openai/runtime.browser.js +649 -0
- package/dist/provider-openai/runtime.browser.js.map +25 -0
- package/dist/provider-openai/runtime.js +3 -1
- package/dist/provider-openai/runtime.js.map +5 -5
- package/dist/provider-tf-mediapipe/TensorFlowMediaPipeProvider.d.ts +1 -0
- package/dist/provider-tf-mediapipe/TensorFlowMediaPipeProvider.d.ts.map +1 -1
- package/dist/provider-tf-mediapipe/TensorFlowMediaPipeQueuedProvider.d.ts +1 -0
- package/dist/provider-tf-mediapipe/TensorFlowMediaPipeQueuedProvider.d.ts.map +1 -1
- package/dist/provider-tf-mediapipe/common/TFMP_Client.d.ts.map +1 -1
- package/dist/provider-tf-mediapipe/common/TFMP_JobRunFns.d.ts +2 -2
- package/dist/provider-tf-mediapipe/common/TFMP_ModelSchema.d.ts +3 -6
- package/dist/provider-tf-mediapipe/common/TFMP_ModelSchema.d.ts.map +1 -1
- package/dist/provider-tf-mediapipe/index.js +3 -3
- package/dist/provider-tf-mediapipe/index.js.map +4 -4
- package/dist/provider-tf-mediapipe/runtime.js +6 -2
- package/dist/provider-tf-mediapipe/runtime.js.map +5 -5
- package/package.json +21 -14
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const HF_TRANSFORMERS_ONNX = \"HF_TRANSFORMERS_ONNX\";\nexport const HTF_CACHE_NAME = \"transformers-cache\";\n\nexport type QuantizationDataType =\n | \"auto\" // Auto-detect based on environment\n | \"fp32\"\n | \"fp16\"\n | \"q8\"\n | \"int8\"\n | \"uint8\"\n | \"q4\"\n | \"bnb4\"\n | \"q4f16\"; // fp16 model with int4 block weight quantization\n\nexport const QuantizationDataType = {\n auto: \"auto\",\n fp32: \"fp32\",\n fp16: \"fp16\",\n q8: \"q8\",\n int8: \"int8\",\n uint8: \"uint8\",\n q4: \"q4\",\n bnb4: \"bnb4\",\n q4f16: \"q4f16\",\n} as const satisfies Record<QuantizationDataType, QuantizationDataType>;\n\ntype TextPipelineUseCase =\n | \"fill-mask\" // https://huggingface.co/tasks/fill-mask\n | \"token-classification\" // https://huggingface.co/tasks/token-classification\n | \"text-generation\" // https://huggingface.co/tasks/text-generation#completion-generation-models\n | \"text2text-generation\" // https://huggingface.co/tasks/text-generation#text-to-text-generation-models\n | \"text-classification\" // https://huggingface.co/tasks/text-classification\n | \"summarization\" // https://huggingface.co/tasks/sentence-similarity\n | \"translation\" // https://huggingface.co/tasks/translation\n | \"feature-extraction\" // https://huggingface.co/tasks/feature-extraction\n | \"zero-shot-classification\" // https://huggingface.co/tasks/zero-shot-classification\n | \"question-answering\"; // https://huggingface.co/tasks/question-answering\n\nconst TextPipelineUseCase = {\n \"fill-mask\": \"fill-mask\",\n \"token-classification\": \"token-classification\",\n \"text-generation\": \"text-generation\",\n \"text2text-generation\": \"text2text-generation\",\n \"text-classification\": \"text-classification\",\n summarization: \"summarization\",\n translation: \"translation\",\n \"feature-extraction\": \"feature-extraction\",\n \"zero-shot-classification\": \"zero-shot-classification\",\n \"question-answering\": \"question-answering\",\n} as const satisfies Record<TextPipelineUseCase, TextPipelineUseCase>;\n\ntype VisionPipelineUseCase =\n | \"background-removal\" // https://huggingface.co/tasks/image-segmentation#background-removal\n | \"image-segmentation\" // https://huggingface.co/tasks/image-segmentation\n | \"depth-estimation\" // https://huggingface.co/tasks/depth-estimation\n | \"image-classification\" // https://huggingface.co/tasks/image-classification\n | \"image-to-image\" // https://huggingface.co/tasks/image-to-image\n // | \"text-to-image\" // https://huggingface.co/tasks/text-to-image\n | \"image-to-text\" // https://huggingface.co/tasks/image-to-text\n // | \"image-text-to-text\" // https://huggingface.co/tasks/image-text-to-text\n | \"object-detection\" // https://huggingface.co/tasks/object-detection\n | \"image-feature-extraction\"; // https://huggingface.co/tasks/image-feature-extraction\n\nconst VisionPipelineUseCase = {\n \"background-removal\": \"background-removal\",\n \"image-segmentation\": \"image-segmentation\",\n \"depth-estimation\": \"depth-estimation\",\n \"image-classification\": \"image-classification\",\n \"image-to-image\": \"image-to-image\",\n // \"text-to-image\": \"text-to-image\",\n \"image-to-text\": \"image-to-text\",\n // \"image-text-to-text\": \"image-text-to-text\",\n \"object-detection\": \"object-detection\",\n \"image-feature-extraction\": \"image-feature-extraction\",\n} as const satisfies Record<VisionPipelineUseCase, VisionPipelineUseCase>;\n\ntype AudioPipelineUseCase =\n | \"audio-classification\" // https://huggingface.co/tasks/audio-classification\n | \"automatic-speech-recognition\" // https://huggingface.co/tasks/automatic-speech-recognition\n | \"text-to-speech\"; // https://huggingface.co/tasks/text-to-speech\n\nconst AudioPipelineUseCase = {\n \"audio-classification\": \"audio-classification\",\n \"automatic-speech-recognition\": \"automatic-speech-recognition\",\n \"text-to-speech\": \"text-to-speech\",\n} as const satisfies Record<AudioPipelineUseCase, AudioPipelineUseCase>;\n\ntype MultimodalPipelineUseCase =\n | \"document-question-answering\" // https://huggingface.co/tasks/document-question-answering\n | \"image-to-text\" // https://huggingface.co/tasks/image-to-text\n | \"zero-shot-audio-classification\" // https://huggingface.co/tasks/zero-shot-audio-classification\n | \"zero-shot-image-classification\" // https://huggingface.co/tasks/zero-shot-image-classification\n | \"zero-shot-object-detection\"; // https://huggingface.co/tasks/zero-shot-object-detection\n\nconst MultimodalPipelineUseCase = {\n \"document-question-answering\": \"document-question-answering\",\n \"image-to-text\": \"image-to-text\",\n \"zero-shot-audio-classification\": \"zero-shot-audio-classification\",\n \"zero-shot-image-classification\": \"zero-shot-image-classification\",\n \"zero-shot-object-detection\": \"zero-shot-object-detection\",\n} as const satisfies Record<MultimodalPipelineUseCase, MultimodalPipelineUseCase>;\n\nexport type PipelineUseCase =\n | TextPipelineUseCase\n | VisionPipelineUseCase\n | AudioPipelineUseCase\n | MultimodalPipelineUseCase;\n\nexport const PipelineUseCase = {\n ...TextPipelineUseCase,\n ...VisionPipelineUseCase,\n ...AudioPipelineUseCase,\n ...MultimodalPipelineUseCase,\n} as const satisfies Record<PipelineUseCase, PipelineUseCase>;\n",
|
|
6
6
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ModelConfigSchema, ModelRecordSchema } from \"@workglow/ai/worker\";\nimport { DataPortSchemaObject, FromSchema } from \"@workglow/util/worker\";\nimport { HF_TRANSFORMERS_ONNX, PipelineUseCase, QuantizationDataType } from \"./HFT_Constants\";\n\nexport const HfTransformersOnnxModelSchema = {\n type: \"object\",\n properties: {\n provider: {\n const: HF_TRANSFORMERS_ONNX,\n description: \"Discriminator: ONNX runtime backend.\",\n },\n provider_config: {\n type: \"object\",\n description: \"ONNX runtime-specific options.\",\n properties: {\n pipeline: {\n type: \"string\",\n enum: Object.values(PipelineUseCase),\n description: \"Pipeline type for the ONNX model.\",\n default: \"text-generation\",\n },\n model_path: {\n type: \"string\",\n description: \"Filesystem path or URI for the ONNX model.\",\n },\n dtype: {\n type: \"string\",\n enum: Object.values(QuantizationDataType),\n description: \"Data type for the ONNX model.\",\n default: \"auto\",\n },\n device: {\n type: \"string\",\n enum: [\"cpu\", \"gpu\", \"webgpu\", \"wasm\", \"metal\"],\n description: \"High-level device selection.\",\n default: \"webgpu\",\n },\n execution_providers: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Raw ONNX Runtime execution provider identifiers.\",\n \"x-ui-hidden\": true,\n },\n intra_op_num_threads: {\n type: \"integer\",\n minimum: 1,\n },\n inter_op_num_threads: {\n type: \"integer\",\n minimum: 1,\n },\n use_external_data_format: {\n type: \"boolean\",\n description: \"Whether the model uses external data format.\",\n },\n native_dimensions: {\n type: \"integer\",\n description: \"The native dimensions of the model.\",\n },\n pooling: {\n type: \"string\",\n enum: [\"mean\", \"last_token\", \"cls\"],\n description: \"The pooling strategy to use for the model.\",\n default: \"mean\",\n },\n normalize: {\n type: \"boolean\",\n description: \"Whether the model uses normalization.\",\n default: true,\n },\n language_style: {\n type: \"string\",\n description: \"The language style of the model.\",\n },\n mrl: {\n type: \"boolean\",\n description: \"Whether the model uses matryoshka.\",\n default: false,\n },\n },\n required: [\"model_path\", \"pipeline\"],\n additionalProperties: false,\n if: {\n properties: {\n pipeline: {\n const: \"feature-extraction\",\n },\n },\n },\n then: {\n required: [\"native_dimensions\"],\n },\n },\n },\n required: [\"provider\", \"provider_config\"],\n additionalProperties: true,\n} as const satisfies DataPortSchemaObject;\n\nexport const HfTransformersOnnxModelRecordSchema = {\n type: \"object\",\n properties: {\n ...ModelRecordSchema.properties,\n ...HfTransformersOnnxModelSchema.properties,\n },\n required: [...ModelRecordSchema.required, ...HfTransformersOnnxModelSchema.required],\n additionalProperties: false,\n} as const satisfies DataPortSchemaObject;\n\nexport type HfTransformersOnnxModelRecord = FromSchema<typeof HfTransformersOnnxModelRecordSchema>;\n\nexport const HfTransformersOnnxModelConfigSchema = {\n type: \"object\",\n properties: {\n ...ModelConfigSchema.properties,\n ...HfTransformersOnnxModelSchema.properties,\n },\n required: [...ModelConfigSchema.required, ...HfTransformersOnnxModelSchema.required],\n additionalProperties: false,\n} as const satisfies DataPortSchemaObject;\n\nexport type HfTransformersOnnxModelConfig = FromSchema<typeof HfTransformersOnnxModelConfigSchema>;\n",
|
|
7
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n AiProvider,\n type AiProviderReactiveRunFn,\n type AiProviderRunFn,\n type AiProviderStreamFn,\n} from \"@workglow/ai/worker\";\nimport { HF_TRANSFORMERS_ONNX } from \"./common/HFT_Constants\";\nimport type { HfTransformersOnnxModelConfig } from \"./common/HFT_ModelSchema\";\n\n/**\n * AI provider for HuggingFace Transformers ONNX models.\n *\n * Supports text, vision, and multimodal tasks via the @huggingface/transformers library.\n *\n * Task run functions are injected via the constructor so that the heavy\n * `@huggingface/transformers` library is only imported where actually needed\n * (inline mode, worker server), not on the main thread in worker mode.\n */\nexport class HuggingFaceTransformersProvider extends AiProvider<HfTransformersOnnxModelConfig> {\n readonly name = HF_TRANSFORMERS_ONNX;\n readonly isLocal = true;\n readonly supportsBrowser = true;\n\n readonly taskTypes = [\n \"DownloadModelTask\",\n \"UnloadModelTask\",\n \"ModelInfoTask\",\n \"CountTokensTask\",\n \"TextEmbeddingTask\",\n \"TextGenerationTask\",\n \"TextQuestionAnswerTask\",\n \"TextLanguageDetectionTask\",\n \"TextClassificationTask\",\n \"TextFillMaskTask\",\n \"TextNamedEntityRecognitionTask\",\n \"TextRewriterTask\",\n \"TextSummaryTask\",\n \"TextTranslationTask\",\n \"ImageSegmentationTask\",\n \"ImageToTextTask\",\n \"BackgroundRemovalTask\",\n \"ImageEmbeddingTask\",\n \"ImageClassificationTask\",\n \"ObjectDetectionTask\",\n \"ToolCallingTask\",\n \"ModelSearchTask\",\n ] as const;\n\n constructor(\n tasks?: Record<string, AiProviderRunFn<any, any, HfTransformersOnnxModelConfig>>,\n streamTasks?: Record<string, AiProviderStreamFn<any, any, HfTransformersOnnxModelConfig>>,\n reactiveTasks?: Record<string, AiProviderReactiveRunFn<any, any, HfTransformersOnnxModelConfig>>\n ) {\n super(tasks, streamTasks, reactiveTasks);\n }\n}\n",
|
|
8
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n QueuedAiProvider,\n type AiProviderReactiveRunFn,\n type AiProviderRunFn,\n type AiProviderStreamFn,\n} from \"@workglow/ai\";\nimport { HF_TRANSFORMERS_ONNX } from \"./common/HFT_Constants\";\nimport type { HfTransformersOnnxModelConfig } from \"./common/HFT_ModelSchema\";\n\n/** Main-thread registration (inline or worker-backed); creates the default job queue. */\nexport class HuggingFaceTransformersQueuedProvider extends QueuedAiProvider<HfTransformersOnnxModelConfig> {\n readonly name = HF_TRANSFORMERS_ONNX;\n readonly isLocal = true;\n readonly supportsBrowser = true;\n\n readonly taskTypes = [\n \"DownloadModelTask\",\n \"UnloadModelTask\",\n \"ModelInfoTask\",\n \"CountTokensTask\",\n \"TextEmbeddingTask\",\n \"TextGenerationTask\",\n \"TextQuestionAnswerTask\",\n \"TextLanguageDetectionTask\",\n \"TextClassificationTask\",\n \"TextFillMaskTask\",\n \"TextNamedEntityRecognitionTask\",\n \"TextRewriterTask\",\n \"TextSummaryTask\",\n \"TextTranslationTask\",\n \"ImageSegmentationTask\",\n \"ImageToTextTask\",\n \"BackgroundRemovalTask\",\n \"ImageEmbeddingTask\",\n \"ImageClassificationTask\",\n \"ObjectDetectionTask\",\n \"ToolCallingTask\",\n \"ModelSearchTask\",\n ] as const;\n\n constructor(\n tasks?: Record<string, AiProviderRunFn<any, any, HfTransformersOnnxModelConfig>>,\n streamTasks?: Record<string, AiProviderStreamFn<any, any, HfTransformersOnnxModelConfig>>,\n reactiveTasks?: Record<string, AiProviderReactiveRunFn<any, any, HfTransformersOnnxModelConfig>>\n ) {\n super(tasks, streamTasks, reactiveTasks);\n }\n}\n",
|
|
7
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n AiProvider,\n type AiProviderReactiveRunFn,\n type AiProviderRunFn,\n type AiProviderStreamFn,\n} from \"@workglow/ai/worker\";\nimport { HF_TRANSFORMERS_ONNX } from \"./common/HFT_Constants\";\nimport type { HfTransformersOnnxModelConfig } from \"./common/HFT_ModelSchema\";\n\n/**\n * AI provider for HuggingFace Transformers ONNX models.\n *\n * Supports text, vision, and multimodal tasks via the @huggingface/transformers library.\n *\n * Task run functions are injected via the constructor so that the heavy\n * `@huggingface/transformers` library is only imported where actually needed\n * (inline mode, worker server), not on the main thread in worker mode.\n */\nexport class HuggingFaceTransformersProvider extends AiProvider<HfTransformersOnnxModelConfig> {\n readonly name = HF_TRANSFORMERS_ONNX;\n readonly displayName = \"Hugging Face Transformers (ONNX)\";\n readonly isLocal = true;\n readonly supportsBrowser = true;\n\n readonly taskTypes = [\n \"DownloadModelTask\",\n \"UnloadModelTask\",\n \"ModelInfoTask\",\n \"CountTokensTask\",\n \"TextEmbeddingTask\",\n \"TextGenerationTask\",\n \"TextQuestionAnswerTask\",\n \"TextLanguageDetectionTask\",\n \"TextClassificationTask\",\n \"TextFillMaskTask\",\n \"TextNamedEntityRecognitionTask\",\n \"TextRewriterTask\",\n \"TextSummaryTask\",\n \"TextTranslationTask\",\n \"ImageSegmentationTask\",\n \"ImageToTextTask\",\n \"BackgroundRemovalTask\",\n \"ImageEmbeddingTask\",\n \"ImageClassificationTask\",\n \"ObjectDetectionTask\",\n \"ToolCallingTask\",\n \"ModelSearchTask\",\n ] as const;\n\n constructor(\n tasks?: Record<string, AiProviderRunFn<any, any, HfTransformersOnnxModelConfig>>,\n streamTasks?: Record<string, AiProviderStreamFn<any, any, HfTransformersOnnxModelConfig>>,\n reactiveTasks?: Record<string, AiProviderReactiveRunFn<any, any, HfTransformersOnnxModelConfig>>\n ) {\n super(tasks, streamTasks, reactiveTasks);\n }\n}\n",
|
|
8
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n QueuedAiProvider,\n type AiProviderReactiveRunFn,\n type AiProviderRunFn,\n type AiProviderStreamFn,\n} from \"@workglow/ai\";\nimport { HF_TRANSFORMERS_ONNX } from \"./common/HFT_Constants\";\nimport type { HfTransformersOnnxModelConfig } from \"./common/HFT_ModelSchema\";\n\n/** Main-thread registration (inline or worker-backed); creates the default job queue. */\nexport class HuggingFaceTransformersQueuedProvider extends QueuedAiProvider<HfTransformersOnnxModelConfig> {\n readonly name = HF_TRANSFORMERS_ONNX;\n readonly displayName = \"Hugging Face Transformers (ONNX)\";\n readonly isLocal = true;\n readonly supportsBrowser = true;\n\n readonly taskTypes = [\n \"DownloadModelTask\",\n \"UnloadModelTask\",\n \"ModelInfoTask\",\n \"CountTokensTask\",\n \"TextEmbeddingTask\",\n \"TextGenerationTask\",\n \"TextQuestionAnswerTask\",\n \"TextLanguageDetectionTask\",\n \"TextClassificationTask\",\n \"TextFillMaskTask\",\n \"TextNamedEntityRecognitionTask\",\n \"TextRewriterTask\",\n \"TextSummaryTask\",\n \"TextTranslationTask\",\n \"ImageSegmentationTask\",\n \"ImageToTextTask\",\n \"BackgroundRemovalTask\",\n \"ImageEmbeddingTask\",\n \"ImageClassificationTask\",\n \"ObjectDetectionTask\",\n \"ToolCallingTask\",\n \"ModelSearchTask\",\n ] as const;\n\n constructor(\n tasks?: Record<string, AiProviderRunFn<any, any, HfTransformersOnnxModelConfig>>,\n streamTasks?: Record<string, AiProviderStreamFn<any, any, HfTransformersOnnxModelConfig>>,\n reactiveTasks?: Record<string, AiProviderReactiveRunFn<any, any, HfTransformersOnnxModelConfig>>\n ) {\n super(tasks, streamTasks, reactiveTasks);\n }\n}\n",
|
|
9
9
|
"/**\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 { HuggingFaceTransformersQueuedProvider } from \"./HuggingFaceTransformersQueuedProvider\";\n\n/**\n * Register HuggingFace Transformers ONNX on the **main thread** with worker-backed execution\n * (lightweight proxy; heavy work in the worker).\n */\nexport async function registerHuggingFaceTransformers(\n options: AiProviderRegisterOptions & {\n worker: Worker | (() => Worker);\n }\n): Promise<void> {\n await new HuggingFaceTransformersQueuedProvider().register(options);\n}\n",
|
|
10
10
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const ONNX_QUANTIZATION_SUFFIX_MAPPING = {\n fp32: \"\",\n fp16: \"_fp16\",\n int8: \"_int8\",\n uint8: \"_uint8\",\n q8: \"_quantized\",\n q4: \"_q4\",\n q4f16: \"_q4f16\",\n bnb4: \"_bnb4\",\n} as const;\n\nexport type OnnxQuantization = keyof typeof ONNX_QUANTIZATION_SUFFIX_MAPPING;\n\nconst SUFFIXES_LONGEST_FIRST = (Object.entries(ONNX_QUANTIZATION_SUFFIX_MAPPING) as [OnnxQuantization, string][])\n .filter(([, suffix]) => suffix !== \"\")\n .sort((a, b) => b[1].length - a[1].length);\n\nexport function parseOnnxQuantizations(params: {\n /** File paths, e.g. from listModels/modelInfo with additionalFields: [\"filePaths\"] */\n filePaths: string[];\n /** Subdirectory containing ONNX files. @default \"onnx\" */\n subfolder?: string;\n}): OnnxQuantization[] {\n const subfolder = params.subfolder ?? \"onnx\";\n const prefix = subfolder + \"/\";\n\n const stems: string[] = [];\n for (const fp of params.filePaths) {\n if (!fp.startsWith(prefix)) continue;\n if (!fp.endsWith(\".onnx\")) continue;\n if (fp.endsWith(\".onnx_data\")) continue;\n stems.push(fp.slice(prefix.length, -\".onnx\".length));\n }\n\n if (stems.length === 0) return [];\n\n const parsed: Array<{ baseName: string; dtype: OnnxQuantization }> = [];\n for (const stem of stems) {\n let matched = false;\n for (const [dtype, suffix] of SUFFIXES_LONGEST_FIRST) {\n if (stem.endsWith(suffix)) {\n parsed.push({ baseName: stem.slice(0, -suffix.length), dtype });\n matched = true;\n break;\n }\n }\n if (!matched) {\n parsed.push({ baseName: stem, dtype: \"fp32\" });\n }\n }\n\n const allBaseNames = new Set(parsed.map((p) => p.baseName));\n const byDtype = new Map<OnnxQuantization, Set<string>>();\n for (const { baseName, dtype } of parsed) {\n let set = byDtype.get(dtype);\n if (!set) {\n set = new Set();\n byDtype.set(dtype, set);\n }\n set.add(baseName);\n }\n\n const allDtypes = Object.keys(ONNX_QUANTIZATION_SUFFIX_MAPPING) as OnnxQuantization[];\n return allDtypes.filter((dtype) => {\n const set = byDtype.get(dtype);\n return set !== undefined && set.size === allBaseNames.size;\n });\n}\n",
|
|
11
11
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ToolCalls } from \"@workglow/ai\";\n\n/**\n * Parse tool calls from model-generated text.\n *\n * Many instruct models (Qwen, Llama, Hermes, etc.) emit tool calls in one of\n * these formats:\n *\n * 1. `<tool_call>{\"name\":\"fn\",\"arguments\":{...}}</tool_call>` (Qwen/Hermes)\n * 2. Plain JSON objects with a \"name\" + \"arguments\" key\n * 3. `{\"function\":{\"name\":\"fn\",\"arguments\":{...}}}`\n *\n * This function extracts all such tool calls from the raw response text\n * and returns both the cleaned text (with tool-call markup removed) and\n * the parsed ToolCall array.\n */\nexport function parseToolCallsFromText(responseText: string): {\n text: string;\n toolCalls: ToolCalls;\n} {\n const toolCalls: ToolCalls = [];\n let callIndex = 0;\n let cleanedText = responseText;\n\n // Pattern 1: <tool_call>...</tool_call> blocks (Qwen, Hermes, etc.)\n const toolCallTagRegex = /<tool_call>([\\s\\S]*?)<\\/tool_call>/g;\n let tagMatch;\n while ((tagMatch = toolCallTagRegex.exec(responseText)) !== null) {\n try {\n const parsed = JSON.parse(tagMatch[1].trim());\n const id = `call_${callIndex++}`;\n toolCalls.push({\n id,\n name: parsed.name ?? parsed.function?.name ?? \"\",\n input: (parsed.arguments ??\n parsed.function?.arguments ??\n parsed.parameters ??\n {}) as Record<string, unknown>,\n });\n } catch {\n // Not valid JSON inside the tag, skip\n }\n }\n\n if (toolCalls.length > 0) {\n // Remove tool_call tags from the text output\n cleanedText = responseText.replace(/<tool_call>[\\s\\S]*?<\\/tool_call>/g, \"\").trim();\n return { text: cleanedText, toolCalls };\n }\n\n // Pattern 2: Use a brace-balanced scanner to correctly handle nested JSON objects.\n const jsonCandidates: Array<{ text: string; start: number; end: number }> = [];\n (function collectBalancedJsonBlocks(source: string) {\n const length = source.length;\n let i = 0;\n while (i < length) {\n if (source[i] !== \"{\") {\n i++;\n continue;\n }\n let depth = 1;\n let j = i + 1;\n let inString = false;\n let escape = false;\n while (j < length && depth > 0) {\n const ch = source[j];\n if (inString) {\n if (escape) {\n escape = false;\n } else if (ch === \"\\\\\") {\n escape = true;\n } else if (ch === '\"') {\n inString = false;\n }\n } else {\n if (ch === '\"') {\n inString = true;\n } else if (ch === \"{\") {\n depth++;\n } else if (ch === \"}\") {\n depth--;\n }\n }\n j++;\n }\n if (depth === 0) {\n jsonCandidates.push({ text: source.slice(i, j), start: i, end: j });\n i = j;\n } else {\n break;\n }\n }\n })(responseText);\n\n const matchedRanges: Array<{ start: number; end: number }> = [];\n for (const candidate of jsonCandidates) {\n try {\n const parsed = JSON.parse(candidate.text);\n if (parsed.name && (parsed.arguments !== undefined || parsed.parameters !== undefined)) {\n const id = `call_${callIndex++}`;\n toolCalls.push({\n id,\n name: parsed.name as string,\n input: (parsed.arguments ?? parsed.parameters ?? {}) as Record<string, unknown>,\n });\n matchedRanges.push({ start: candidate.start, end: candidate.end });\n } else if (parsed.function?.name) {\n let functionArgs: unknown = parsed.function.arguments ?? {};\n if (typeof functionArgs === \"string\") {\n try {\n functionArgs = JSON.parse(functionArgs);\n } catch (innerError) {\n console.warn(\"Failed to parse tool call function.arguments as JSON\", innerError);\n functionArgs = {};\n }\n }\n const id = `call_${callIndex++}`;\n toolCalls.push({\n id,\n name: parsed.function.name as string,\n input: (functionArgs ?? {}) as Record<string, unknown>,\n });\n matchedRanges.push({ start: candidate.start, end: candidate.end });\n }\n } catch {\n // Not valid JSON, skip\n }\n }\n\n if (toolCalls.length > 0) {\n // Remove only the matched JSON portions, preserving surrounding text\n let result = \"\";\n let lastIndex = 0;\n for (const range of matchedRanges) {\n result += responseText.slice(lastIndex, range.start);\n lastIndex = range.end;\n }\n result += responseText.slice(lastIndex);\n cleanedText = result.trim();\n }\n\n return { text: cleanedText, toolCalls };\n}\n\n/**\n * State machine that filters `<tool_call>…</tool_call>` markup out of a\n * stream of text-delta tokens. Tokens that are clearly outside markup are\n * flushed immediately; tokens that *might* be the start of a tag are held\n * in a lookahead buffer until they can be disambiguated.\n *\n * This only handles the XML-tag pattern (Pattern 1 in parseToolCallsFromText).\n * Bare-JSON tool calls (Pattern 2) cannot be reliably detected token-by-token\n * and are still cleaned up via the post-hoc `parseToolCallsFromText` pass on\n * the finish event.\n */\nexport function createToolCallMarkupFilter(emit: (text: string) => void) {\n const OPEN_TAG = \"<tool_call>\";\n const CLOSE_TAG = \"</tool_call>\";\n\n /** \"text\" = normal output, \"tag\" = inside a tool_call block */\n let state: \"text\" | \"tag\" = \"text\";\n /** Buffered text that might be a partial tag prefix */\n let pending = \"\";\n\n function feed(token: string) {\n if (state === \"tag\") {\n // Inside a tool_call block — suppress everything until we see the close tag\n pending += token;\n const closeIdx = pending.indexOf(CLOSE_TAG);\n if (closeIdx !== -1) {\n // End of the tool_call block; resume normal output after the close tag\n const afterClose = pending.slice(closeIdx + CLOSE_TAG.length);\n pending = \"\";\n state = \"text\";\n if (afterClose.length > 0) {\n feed(afterClose);\n }\n }\n // else: still inside the tag block, keep suppressing\n return;\n }\n\n // state === \"text\"\n const combined = pending + token;\n\n // Check for a complete open tag\n const openIdx = combined.indexOf(OPEN_TAG);\n if (openIdx !== -1) {\n // Emit everything before the tag\n const before = combined.slice(0, openIdx);\n if (before.length > 0) {\n emit(before);\n }\n // Switch to tag state; feed the remainder (after the open tag) back through\n pending = \"\";\n state = \"tag\";\n const afterOpen = combined.slice(openIdx + OPEN_TAG.length);\n if (afterOpen.length > 0) {\n feed(afterOpen);\n }\n return;\n }\n\n // Check if the tail of `combined` could be the start of \"<tool_call>\"\n // e.g. combined ends with \"<\", \"<t\", \"<to\", ..., \"<tool_call\"\n let prefixLen = 0;\n for (let len = Math.min(combined.length, OPEN_TAG.length - 1); len >= 1; len--) {\n if (combined.endsWith(OPEN_TAG.slice(0, len))) {\n prefixLen = len;\n break;\n }\n }\n\n if (prefixLen > 0) {\n // The tail is ambiguous — hold it back, flush the rest\n const safe = combined.slice(0, combined.length - prefixLen);\n if (safe.length > 0) {\n emit(safe);\n }\n pending = combined.slice(combined.length - prefixLen);\n } else {\n // No ambiguity — flush everything\n if (combined.length > 0) {\n emit(combined);\n }\n pending = \"\";\n }\n }\n\n /** Flush any remaining buffered text (called when the stream ends). */\n function flush() {\n if (pending.length > 0 && state === \"text\") {\n emit(pending);\n pending = \"\";\n }\n // If state === \"tag\", the pending content is suppressed tool-call markup\n pending = \"\";\n state = \"text\";\n }\n\n return { feed, flush };\n}\n"
|
|
12
12
|
],
|
|
13
|
-
"mappings": "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
|
|
14
|
-
"debugId": "
|
|
13
|
+
"mappings": "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",
|
|
14
|
+
"debugId": "B42B282A66AE1B6664756E2164756E21",
|
|
15
15
|
"names": []
|
|
16
16
|
}
|
|
@@ -76,7 +76,13 @@ function removeCachedPipeline(cacheKey) {
|
|
|
76
76
|
return pipelines.delete(cacheKey);
|
|
77
77
|
}
|
|
78
78
|
function isBrowserEnv() {
|
|
79
|
-
|
|
79
|
+
if (typeof globalThis === "undefined")
|
|
80
|
+
return false;
|
|
81
|
+
if (typeof globalThis.window !== "undefined")
|
|
82
|
+
return true;
|
|
83
|
+
if (typeof globalThis.WorkerGlobalScope !== "undefined")
|
|
84
|
+
return true;
|
|
85
|
+
return false;
|
|
80
86
|
}
|
|
81
87
|
function getPipelineCacheKey(model) {
|
|
82
88
|
const dtype = model.provider_config.dtype || "q8";
|
|
@@ -192,7 +198,17 @@ var _transformersSdk, _cacheDir, modelAbortControllers, pipelines, pipelineLoadP
|
|
|
192
198
|
}
|
|
193
199
|
};
|
|
194
200
|
let device = model.provider_config.device;
|
|
195
|
-
if (
|
|
201
|
+
if (isBrowserEnv()) {
|
|
202
|
+
if (device === "gpu") {
|
|
203
|
+
device = "webgpu";
|
|
204
|
+
}
|
|
205
|
+
if (device === "cpu") {
|
|
206
|
+
device = "wasm";
|
|
207
|
+
}
|
|
208
|
+
if (device !== "wasm" && device !== "webgpu") {
|
|
209
|
+
device = "webgpu";
|
|
210
|
+
}
|
|
211
|
+
} else {
|
|
196
212
|
if (device === "wasm" || device === "webgpu") {
|
|
197
213
|
device = undefined;
|
|
198
214
|
}
|
|
@@ -1044,9 +1060,8 @@ function createStreamEventQueue() {
|
|
|
1044
1060
|
};
|
|
1045
1061
|
return { push, done, error, iterable };
|
|
1046
1062
|
}
|
|
1047
|
-
function createStreamingTextStreamer(tokenizer, queue,
|
|
1048
|
-
|
|
1049
|
-
return new TextStreamer(tokenizer, {
|
|
1063
|
+
function createStreamingTextStreamer(tokenizer, queue, textStreamer) {
|
|
1064
|
+
return new textStreamer(tokenizer, {
|
|
1050
1065
|
skip_prompt: true,
|
|
1051
1066
|
decode_kwargs: { skip_special_tokens: true },
|
|
1052
1067
|
callback_function: (text) => {
|
|
@@ -1054,10 +1069,9 @@ function createStreamingTextStreamer(tokenizer, queue, transformers) {
|
|
|
1054
1069
|
}
|
|
1055
1070
|
});
|
|
1056
1071
|
}
|
|
1057
|
-
function createTextStreamer(tokenizer, updateProgress,
|
|
1058
|
-
const { TextStreamer } = transformers;
|
|
1072
|
+
function createTextStreamer(tokenizer, updateProgress, textStreamer) {
|
|
1059
1073
|
let count = 0;
|
|
1060
|
-
return new
|
|
1074
|
+
return new textStreamer(tokenizer, {
|
|
1061
1075
|
skip_prompt: true,
|
|
1062
1076
|
decode_kwargs: { skip_special_tokens: true },
|
|
1063
1077
|
callback_function: (text) => {
|
|
@@ -1116,14 +1130,14 @@ function extractJsonFromText(text) {
|
|
|
1116
1130
|
}
|
|
1117
1131
|
var HFT_StructuredGeneration = async (input, model, onProgress, signal) => {
|
|
1118
1132
|
const generateText = await getPipeline(model, onProgress, {}, signal);
|
|
1119
|
-
const
|
|
1133
|
+
const { TextStreamer } = await loadTransformersSDK();
|
|
1120
1134
|
const prompt = buildStructuredGenerationPrompt(input);
|
|
1121
1135
|
const messages = [{ role: "user", content: prompt }];
|
|
1122
1136
|
const formattedPrompt = generateText.tokenizer.apply_chat_template(messages, {
|
|
1123
1137
|
tokenize: false,
|
|
1124
1138
|
add_generation_prompt: true
|
|
1125
1139
|
});
|
|
1126
|
-
const streamer = createTextStreamer(generateText.tokenizer, onProgress,
|
|
1140
|
+
const streamer = createTextStreamer(generateText.tokenizer, onProgress, TextStreamer);
|
|
1127
1141
|
let results = await generateText(formattedPrompt, {
|
|
1128
1142
|
max_new_tokens: input.maxTokens ?? 1024,
|
|
1129
1143
|
temperature: input.temperature ?? undefined,
|
|
@@ -1140,7 +1154,7 @@ var HFT_StructuredGeneration = async (input, model, onProgress, signal) => {
|
|
|
1140
1154
|
var HFT_StructuredGeneration_Stream = async function* (input, model, signal) {
|
|
1141
1155
|
const noopProgress = () => {};
|
|
1142
1156
|
const generateText = await getPipeline(model, noopProgress, {}, signal);
|
|
1143
|
-
const
|
|
1157
|
+
const { TextStreamer } = await loadTransformersSDK();
|
|
1144
1158
|
const prompt = buildStructuredGenerationPrompt(input);
|
|
1145
1159
|
const messages = [{ role: "user", content: prompt }];
|
|
1146
1160
|
const formattedPrompt = generateText.tokenizer.apply_chat_template(messages, {
|
|
@@ -1148,7 +1162,7 @@ var HFT_StructuredGeneration_Stream = async function* (input, model, signal) {
|
|
|
1148
1162
|
add_generation_prompt: true
|
|
1149
1163
|
});
|
|
1150
1164
|
const queue = createStreamEventQueue();
|
|
1151
|
-
const streamer = createStreamingTextStreamer(generateText.tokenizer, queue,
|
|
1165
|
+
const streamer = createStreamingTextStreamer(generateText.tokenizer, queue, TextStreamer);
|
|
1152
1166
|
let fullText = "";
|
|
1153
1167
|
const originalPush = queue.push;
|
|
1154
1168
|
queue.push = (event) => {
|
|
@@ -1320,12 +1334,12 @@ var HFT_TextGeneration = async (input, model, onProgress, signal) => {
|
|
|
1320
1334
|
logger.time(timerLabel, { model: model?.provider_config.model_path });
|
|
1321
1335
|
const isArrayInput = Array.isArray(input.prompt);
|
|
1322
1336
|
const generateText = await getPipeline(model, onProgress, {}, signal);
|
|
1323
|
-
const
|
|
1337
|
+
const { TextStreamer } = await loadTransformersSDK();
|
|
1324
1338
|
logger.debug("HFT TextGeneration: pipeline ready, generating text", {
|
|
1325
1339
|
model: model?.provider_config.model_path,
|
|
1326
1340
|
promptLength: isArrayInput ? input.prompt.length : input.prompt?.length
|
|
1327
1341
|
});
|
|
1328
|
-
const streamer = isArrayInput ? undefined : createTextStreamer(generateText.tokenizer, onProgress,
|
|
1342
|
+
const streamer = isArrayInput ? undefined : createTextStreamer(generateText.tokenizer, onProgress, TextStreamer);
|
|
1329
1343
|
let results = await generateText(input.prompt, {
|
|
1330
1344
|
...streamer ? { streamer } : {}
|
|
1331
1345
|
});
|
|
@@ -1350,9 +1364,9 @@ var HFT_TextGeneration = async (input, model, onProgress, signal) => {
|
|
|
1350
1364
|
var HFT_TextGeneration_Stream = async function* (input, model, signal) {
|
|
1351
1365
|
const noopProgress = () => {};
|
|
1352
1366
|
const generateText = await getPipeline(model, noopProgress, {}, signal);
|
|
1353
|
-
const
|
|
1367
|
+
const { TextStreamer } = await loadTransformersSDK();
|
|
1354
1368
|
const queue = createStreamEventQueue();
|
|
1355
|
-
const streamer = createStreamingTextStreamer(generateText.tokenizer, queue,
|
|
1369
|
+
const streamer = createStreamingTextStreamer(generateText.tokenizer, queue, TextStreamer);
|
|
1356
1370
|
const pipelinePromise = generateText(input.prompt, {
|
|
1357
1371
|
streamer
|
|
1358
1372
|
}).then(() => queue.done(), (err) => queue.error(err));
|
|
@@ -1455,8 +1469,8 @@ var HFT_TextQuestionAnswer = async (input, model, onProgress, signal) => {
|
|
|
1455
1469
|
}
|
|
1456
1470
|
return { text: answers };
|
|
1457
1471
|
}
|
|
1458
|
-
const
|
|
1459
|
-
const streamer = createTextStreamer(generateAnswer.tokenizer, onProgress,
|
|
1472
|
+
const { TextStreamer } = await loadTransformersSDK();
|
|
1473
|
+
const streamer = createTextStreamer(generateAnswer.tokenizer, onProgress, TextStreamer);
|
|
1460
1474
|
const result = await generateAnswer(input.question, input.context, {
|
|
1461
1475
|
streamer
|
|
1462
1476
|
});
|
|
@@ -1473,9 +1487,9 @@ var HFT_TextQuestionAnswer = async (input, model, onProgress, signal) => {
|
|
|
1473
1487
|
var HFT_TextQuestionAnswer_Stream = async function* (input, model, signal) {
|
|
1474
1488
|
const noopProgress = () => {};
|
|
1475
1489
|
const generateAnswer = await getPipeline(model, noopProgress, {}, signal);
|
|
1476
|
-
const
|
|
1490
|
+
const { TextStreamer } = await loadTransformersSDK();
|
|
1477
1491
|
const queue = createStreamEventQueue();
|
|
1478
|
-
const streamer = createStreamingTextStreamer(generateAnswer.tokenizer, queue,
|
|
1492
|
+
const streamer = createStreamingTextStreamer(generateAnswer.tokenizer, queue, TextStreamer);
|
|
1479
1493
|
let pipelineResult;
|
|
1480
1494
|
const pipelinePromise = generateAnswer(input.question, input.context, {
|
|
1481
1495
|
streamer
|
|
@@ -1501,8 +1515,8 @@ init_HFT_Pipeline();
|
|
|
1501
1515
|
var HFT_TextRewriter = async (input, model, onProgress, signal) => {
|
|
1502
1516
|
const isArrayInput = Array.isArray(input.text);
|
|
1503
1517
|
const generateText = await getPipeline(model, onProgress, {}, signal);
|
|
1504
|
-
const
|
|
1505
|
-
const streamer = isArrayInput ? undefined : createTextStreamer(generateText.tokenizer, onProgress,
|
|
1518
|
+
const { TextStreamer } = await loadTransformersSDK();
|
|
1519
|
+
const streamer = isArrayInput ? undefined : createTextStreamer(generateText.tokenizer, onProgress, TextStreamer);
|
|
1506
1520
|
if (isArrayInput) {
|
|
1507
1521
|
const texts = input.text;
|
|
1508
1522
|
const promptedTexts = texts.map((t) => (input.prompt ? input.prompt + `
|
|
@@ -1538,9 +1552,9 @@ var HFT_TextRewriter = async (input, model, onProgress, signal) => {
|
|
|
1538
1552
|
var HFT_TextRewriter_Stream = async function* (input, model, signal) {
|
|
1539
1553
|
const noopProgress = () => {};
|
|
1540
1554
|
const generateText = await getPipeline(model, noopProgress, {}, signal);
|
|
1541
|
-
const
|
|
1555
|
+
const { TextStreamer } = await loadTransformersSDK();
|
|
1542
1556
|
const queue = createStreamEventQueue();
|
|
1543
|
-
const streamer = createStreamingTextStreamer(generateText.tokenizer, queue,
|
|
1557
|
+
const streamer = createStreamingTextStreamer(generateText.tokenizer, queue, TextStreamer);
|
|
1544
1558
|
const promptedText = (input.prompt ? input.prompt + `
|
|
1545
1559
|
` : "") + input.text;
|
|
1546
1560
|
const pipelinePromise = generateText(promptedText, {
|
|
@@ -1556,8 +1570,8 @@ init_HFT_Pipeline();
|
|
|
1556
1570
|
var HFT_TextSummary = async (input, model, onProgress, signal) => {
|
|
1557
1571
|
const isArrayInput = Array.isArray(input.text);
|
|
1558
1572
|
const generateSummary = await getPipeline(model, onProgress, {}, signal);
|
|
1559
|
-
const
|
|
1560
|
-
const streamer = isArrayInput ? undefined : createTextStreamer(generateSummary.tokenizer, onProgress,
|
|
1573
|
+
const { TextStreamer } = await loadTransformersSDK();
|
|
1574
|
+
const streamer = isArrayInput ? undefined : createTextStreamer(generateSummary.tokenizer, onProgress, TextStreamer);
|
|
1561
1575
|
const result = await generateSummary(input.text, {
|
|
1562
1576
|
...streamer ? { streamer } : {}
|
|
1563
1577
|
});
|
|
@@ -1580,9 +1594,9 @@ var HFT_TextSummary = async (input, model, onProgress, signal) => {
|
|
|
1580
1594
|
var HFT_TextSummary_Stream = async function* (input, model, signal) {
|
|
1581
1595
|
const noopProgress = () => {};
|
|
1582
1596
|
const generateSummary = await getPipeline(model, noopProgress, {}, signal);
|
|
1583
|
-
const
|
|
1597
|
+
const { TextStreamer } = await loadTransformersSDK();
|
|
1584
1598
|
const queue = createStreamEventQueue();
|
|
1585
|
-
const streamer = createStreamingTextStreamer(generateSummary.tokenizer, queue,
|
|
1599
|
+
const streamer = createStreamingTextStreamer(generateSummary.tokenizer, queue, TextStreamer);
|
|
1586
1600
|
const pipelinePromise = generateSummary(input.text, {
|
|
1587
1601
|
streamer
|
|
1588
1602
|
}).then(() => queue.done(), (err) => queue.error(err));
|
|
@@ -1596,8 +1610,8 @@ init_HFT_Pipeline();
|
|
|
1596
1610
|
var HFT_TextTranslation = async (input, model, onProgress, signal) => {
|
|
1597
1611
|
const isArrayInput = Array.isArray(input.text);
|
|
1598
1612
|
const translate = await getPipeline(model, onProgress, {}, signal);
|
|
1599
|
-
const
|
|
1600
|
-
const streamer = isArrayInput ? undefined : createTextStreamer(translate.tokenizer, onProgress,
|
|
1613
|
+
const { TextStreamer } = await loadTransformersSDK();
|
|
1614
|
+
const streamer = isArrayInput ? undefined : createTextStreamer(translate.tokenizer, onProgress, TextStreamer);
|
|
1601
1615
|
const result = await translate(input.text, {
|
|
1602
1616
|
src_lang: input.source_lang,
|
|
1603
1617
|
tgt_lang: input.target_lang,
|
|
@@ -1619,9 +1633,9 @@ var HFT_TextTranslation = async (input, model, onProgress, signal) => {
|
|
|
1619
1633
|
var HFT_TextTranslation_Stream = async function* (input, model, signal) {
|
|
1620
1634
|
const noopProgress = () => {};
|
|
1621
1635
|
const translate = await getPipeline(model, noopProgress, {}, signal);
|
|
1622
|
-
const
|
|
1636
|
+
const { TextStreamer } = await loadTransformersSDK();
|
|
1623
1637
|
const queue = createStreamEventQueue();
|
|
1624
|
-
const streamer = createStreamingTextStreamer(translate.tokenizer, queue,
|
|
1638
|
+
const streamer = createStreamingTextStreamer(translate.tokenizer, queue, TextStreamer);
|
|
1625
1639
|
const pipelinePromise = translate(input.text, {
|
|
1626
1640
|
src_lang: input.source_lang,
|
|
1627
1641
|
tgt_lang: input.target_lang,
|
|
@@ -1634,7 +1648,11 @@ var HFT_TextTranslation_Stream = async function* (input, model, signal) {
|
|
|
1634
1648
|
|
|
1635
1649
|
// src/provider-hf-transformers/common/HFT_ToolCalling.ts
|
|
1636
1650
|
init_HFT_Pipeline();
|
|
1637
|
-
import {
|
|
1651
|
+
import {
|
|
1652
|
+
buildToolDescription,
|
|
1653
|
+
filterValidToolCalls,
|
|
1654
|
+
toTextFlatMessages
|
|
1655
|
+
} from "@workglow/ai/worker";
|
|
1638
1656
|
function mapHFTTools(tools) {
|
|
1639
1657
|
return tools.map((t) => ({
|
|
1640
1658
|
type: "function",
|
|
@@ -1670,7 +1688,7 @@ ${requiredInstruction}` };
|
|
|
1670
1688
|
var HFT_ToolCalling = async (input, model, onProgress, signal) => {
|
|
1671
1689
|
const isArrayInput = Array.isArray(input.prompt);
|
|
1672
1690
|
const generateText = await getPipeline(model, onProgress, {}, signal);
|
|
1673
|
-
const
|
|
1691
|
+
const { TextStreamer } = await loadTransformersSDK();
|
|
1674
1692
|
if (isArrayInput) {
|
|
1675
1693
|
const prompts = input.prompt;
|
|
1676
1694
|
const texts = [];
|
|
@@ -1684,7 +1702,7 @@ var HFT_ToolCalling = async (input, model, onProgress, signal) => {
|
|
|
1684
1702
|
tokenize: false,
|
|
1685
1703
|
add_generation_prompt: true
|
|
1686
1704
|
});
|
|
1687
|
-
const streamer2 = createTextStreamer(generateText.tokenizer, onProgress,
|
|
1705
|
+
const streamer2 = createTextStreamer(generateText.tokenizer, onProgress, TextStreamer);
|
|
1688
1706
|
let results2 = await generateText(prompt2, {
|
|
1689
1707
|
max_new_tokens: input.maxTokens ?? 1024,
|
|
1690
1708
|
temperature: input.temperature ?? undefined,
|
|
@@ -1708,7 +1726,7 @@ var HFT_ToolCalling = async (input, model, onProgress, signal) => {
|
|
|
1708
1726
|
tokenize: false,
|
|
1709
1727
|
add_generation_prompt: true
|
|
1710
1728
|
});
|
|
1711
|
-
const streamer = createTextStreamer(generateText.tokenizer, onProgress,
|
|
1729
|
+
const streamer = createTextStreamer(generateText.tokenizer, onProgress, TextStreamer);
|
|
1712
1730
|
let results = await generateText(prompt, {
|
|
1713
1731
|
max_new_tokens: input.maxTokens ?? 1024,
|
|
1714
1732
|
temperature: input.temperature ?? undefined,
|
|
@@ -1728,7 +1746,7 @@ var HFT_ToolCalling = async (input, model, onProgress, signal) => {
|
|
|
1728
1746
|
var HFT_ToolCalling_Stream = async function* (input, model, signal) {
|
|
1729
1747
|
const noopProgress = () => {};
|
|
1730
1748
|
const generateText = await getPipeline(model, noopProgress, {}, signal);
|
|
1731
|
-
const
|
|
1749
|
+
const { TextStreamer } = await loadTransformersSDK();
|
|
1732
1750
|
const messages = toTextFlatMessages(input);
|
|
1733
1751
|
const tools = resolveHFTToolsAndMessages(input, messages);
|
|
1734
1752
|
const prompt = generateText.tokenizer.apply_chat_template(messages, {
|
|
@@ -1738,7 +1756,7 @@ var HFT_ToolCalling_Stream = async function* (input, model, signal) {
|
|
|
1738
1756
|
});
|
|
1739
1757
|
const innerQueue = createStreamEventQueue();
|
|
1740
1758
|
const outerQueue = createStreamEventQueue();
|
|
1741
|
-
const streamer = createStreamingTextStreamer(generateText.tokenizer, innerQueue,
|
|
1759
|
+
const streamer = createStreamingTextStreamer(generateText.tokenizer, innerQueue, TextStreamer);
|
|
1742
1760
|
let fullText = "";
|
|
1743
1761
|
const filter = createToolCallMarkupFilter((text) => {
|
|
1744
1762
|
outerQueue.push({ type: "text-delta", port: "text", textDelta: text });
|
|
@@ -1882,6 +1900,7 @@ import {
|
|
|
1882
1900
|
} from "@workglow/ai";
|
|
1883
1901
|
class HuggingFaceTransformersQueuedProvider extends QueuedAiProvider {
|
|
1884
1902
|
name = HF_TRANSFORMERS_ONNX;
|
|
1903
|
+
displayName = "Hugging Face Transformers (ONNX)";
|
|
1885
1904
|
isLocal = true;
|
|
1886
1905
|
supportsBrowser = true;
|
|
1887
1906
|
taskTypes = [
|
|
@@ -1935,6 +1954,7 @@ import {
|
|
|
1935
1954
|
} from "@workglow/ai/worker";
|
|
1936
1955
|
class HuggingFaceTransformersProvider extends AiProvider {
|
|
1937
1956
|
name = HF_TRANSFORMERS_ONNX;
|
|
1957
|
+
displayName = "Hugging Face Transformers (ONNX)";
|
|
1938
1958
|
isLocal = true;
|
|
1939
1959
|
supportsBrowser = true;
|
|
1940
1960
|
taskTypes = [
|
|
@@ -2002,4 +2022,4 @@ export {
|
|
|
2002
2022
|
HF_TRANSFORMERS_ONNX
|
|
2003
2023
|
};
|
|
2004
2024
|
|
|
2005
|
-
//# debugId=
|
|
2025
|
+
//# debugId=7FBB0D520B1672D164756E2164756E21
|