@huggingface/transformers 4.0.0-next.0 → 4.0.0-next.10
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/README.md +32 -6
- package/dist/ort-wasm-simd-threaded.jsep.mjs +31 -31
- package/dist/transformers.js +9261 -1709
- package/dist/transformers.min.js +25 -18
- package/dist/transformers.node.cjs +6119 -3174
- package/dist/transformers.node.min.cjs +25 -23
- package/dist/transformers.node.min.mjs +25 -23
- package/dist/transformers.node.mjs +6034 -3168
- package/dist/transformers.web.js +4255 -1381
- package/dist/transformers.web.min.js +23 -19
- package/package.json +6 -6
- package/src/backends/onnx.js +128 -53
- package/src/backends/utils/cacheWasm.js +28 -46
- package/src/cache_utils.js +62 -0
- package/src/configs.js +123 -23
- package/src/env.js +100 -11
- package/src/generation/logits_sampler.js +3 -15
- package/src/generation/parameters.js +1 -1
- package/src/generation/streamers.js +21 -0
- package/src/image_processors_utils.js +29 -23
- package/src/models/afmoe/modeling_afmoe.js +5 -0
- package/src/models/auto/image_processing_auto.js +2 -1
- package/src/models/auto/modeling_auto.js +16 -2
- package/src/models/auto/tokenization_auto.js +2 -1
- package/src/models/chatterbox/modeling_chatterbox.js +1 -1
- package/src/models/chmv2/image_processing_chmv2.js +3 -0
- package/src/models/chmv2/modeling_chmv2.js +4 -0
- package/src/models/clap/feature_extraction_clap.js +2 -1
- package/src/models/cohere2/modeling_cohere2.js +5 -0
- package/src/models/cohere_asr/feature_extraction_cohere_asr.js +117 -0
- package/src/models/cohere_asr/modeling_cohere_asr.js +11 -0
- package/src/models/cohere_asr/processing_cohere_asr.js +55 -0
- package/src/models/cohere_asr/tokenization_cohere_asr.js +3 -0
- package/src/models/deepseek_v3/modeling_deepseek_v3.js +5 -0
- package/src/models/detr/image_processing_detr.js +1 -1
- package/src/models/eurobert/modeling_eurobert.js +41 -0
- package/src/models/feature_extractors.js +3 -0
- package/src/models/gemma3/image_processing_gemma3.js +3 -0
- package/src/models/gemma3/modeling_gemma3.js +4 -1
- package/src/models/gemma3/processing_gemma3.js +45 -0
- package/src/models/gemma3n/modeling_gemma3n.js +2 -0
- package/src/models/glm46v/image_processing_glm46v.js +12 -0
- package/src/models/glm46v/processing_glm46v.js +5 -0
- package/src/models/glm_moe_dsa/modeling_glm_moe_dsa.js +5 -0
- package/src/models/glm_ocr/modeling_glm_ocr.js +78 -0
- package/src/models/granite_speech/feature_extraction_granite_speech.js +58 -0
- package/src/models/granite_speech/modeling_granite_speech.js +5 -0
- package/src/models/granite_speech/processing_granite_speech.js +62 -0
- package/src/models/grounding_dino/image_processing_grounding_dino.js +1 -1
- package/src/models/idefics3/modeling_idefics3.js +5 -32
- package/src/models/image_processors.js +4 -0
- package/src/models/lfm2_vl/image_processing_lfm2_vl.js +305 -0
- package/src/models/lfm2_vl/modeling_lfm2_vl.js +13 -0
- package/src/models/lfm2_vl/processing_lfm2_vl.js +77 -0
- package/src/models/lighton_ocr/modeling_lighton_ocr.js +3 -0
- package/src/models/llava/modeling_llava.js +1 -1
- package/src/models/marian/tokenization_marian.js +3 -2
- package/src/models/mistral3/modeling_mistral3.js +2 -2
- package/src/models/mistral4/modeling_mistral4.js +5 -0
- package/src/models/modeling_utils.js +283 -300
- package/src/models/models.js +26 -1
- package/src/models/nemotron_h/modeling_nemotron_h.js +5 -0
- package/src/models/olmo_hybrid/modeling_olmo_hybrid.js +5 -0
- package/src/models/paligemma/modeling_paligemma.js +2 -25
- package/src/models/paligemma/processing_paligemma.js +3 -2
- package/src/models/processors.js +8 -0
- package/src/models/qwen2_5_vl/modeling_qwen2_5_vl.js +9 -0
- package/src/models/qwen2_5_vl/processing_qwen2_5_vl.js +3 -0
- package/src/models/qwen2_moe/modeling_qwen2_moe.js +5 -0
- package/src/models/qwen2_vl/image_processing_qwen2_vl.js +15 -1
- package/src/models/qwen2_vl/modeling_qwen2_vl.js +240 -143
- package/src/models/qwen2_vl/processing_qwen2_vl.js +5 -4
- package/src/models/qwen3_5/modeling_qwen3_5.js +4 -0
- package/src/models/qwen3_5_moe/modeling_qwen3_5_moe.js +4 -0
- package/src/models/qwen3_moe/modeling_qwen3_moe.js +5 -0
- package/src/models/qwen3_next/modeling_qwen3_next.js +5 -0
- package/src/models/qwen3_vl/modeling_qwen3_vl.js +4 -0
- package/src/models/qwen3_vl/processing_qwen3_vl.js +3 -0
- package/src/models/qwen3_vl_moe/modeling_qwen3_vl_moe.js +4 -0
- package/src/models/registry.js +61 -5
- package/src/models/sam/image_processing_sam.js +1 -1
- package/src/models/session.js +33 -56
- package/src/models/smolvlm/modeling_smolvlm.js +7 -0
- package/src/models/solar_open/modeling_solar_open.js +5 -0
- package/src/models/tokenizers.js +1 -0
- package/src/models/ultravox/modeling_ultravox.js +1 -3
- package/src/models/voxtral/modeling_voxtral.js +3 -0
- package/src/models/voxtral_realtime/feature_extraction_voxtral_realtime.js +71 -0
- package/src/models/voxtral_realtime/modeling_voxtral_realtime.js +239 -0
- package/src/models/voxtral_realtime/processing_voxtral_realtime.js +113 -0
- package/src/models/whisper/feature_extraction_whisper.js +4 -13
- package/src/models/whisper/modeling_whisper.js +6 -5
- package/src/models/xlm/tokenization_xlm.js +2 -1
- package/src/pipelines/automatic-speech-recognition.js +47 -3
- package/src/pipelines/document-question-answering.js +1 -1
- package/src/pipelines/image-to-text.js +2 -2
- package/src/pipelines/index.js +313 -0
- package/src/pipelines/summarization.js +1 -1
- package/src/pipelines/text-generation.js +5 -1
- package/src/pipelines/text-to-audio.js +4 -2
- package/src/pipelines/text2text-generation.js +1 -1
- package/src/pipelines/translation.js +1 -1
- package/src/pipelines/zero-shot-classification.js +3 -2
- package/src/pipelines.js +140 -428
- package/src/tokenization_utils.js +42 -21
- package/src/transformers.js +10 -1
- package/src/utils/audio.js +20 -3
- package/src/utils/cache/CrossOriginStorageCache.js +251 -0
- package/src/utils/cache/FileCache.js +128 -0
- package/src/utils/cache/cross-origin-storage.d.ts +38 -0
- package/src/utils/cache.js +12 -4
- package/src/utils/core.js +23 -1
- package/src/utils/devices.js +22 -0
- package/src/utils/dtypes.js +55 -0
- package/src/utils/hub/{files.js → FileResponse.js} +0 -90
- package/src/utils/hub/utils.js +45 -5
- package/src/utils/hub.js +67 -23
- package/src/utils/image.js +14 -14
- package/src/utils/logger.js +67 -0
- package/src/utils/lru_cache.js +67 -0
- package/src/utils/memoize_promise.js +45 -0
- package/src/utils/model-loader.js +35 -17
- package/src/utils/model_registry/ModelRegistry.js +382 -0
- package/src/utils/model_registry/clear_cache.js +128 -0
- package/src/utils/model_registry/get_available_dtypes.js +68 -0
- package/src/utils/model_registry/get_file_metadata.js +162 -0
- package/src/utils/model_registry/get_files.js +42 -0
- package/src/utils/model_registry/get_model_files.js +114 -0
- package/src/utils/model_registry/get_pipeline_files.js +44 -0
- package/src/utils/model_registry/get_processor_files.js +20 -0
- package/src/utils/model_registry/get_tokenizer_files.js +21 -0
- package/src/utils/model_registry/is_cached.js +169 -0
- package/src/utils/model_registry/resolve_model_type.js +66 -0
- package/src/utils/random.js +225 -0
- package/src/utils/tensor.js +26 -23
- package/src/utils/video.js +2 -2
- package/types/backends/onnx.d.ts.map +1 -1
- package/types/backends/utils/cacheWasm.d.ts +3 -17
- package/types/backends/utils/cacheWasm.d.ts.map +1 -1
- package/types/cache_utils.d.ts +29 -0
- package/types/cache_utils.d.ts.map +1 -0
- package/types/configs.d.ts.map +1 -1
- package/types/env.d.ts +60 -27
- package/types/env.d.ts.map +1 -1
- package/types/generation/logits_sampler.d.ts +2 -2
- package/types/generation/logits_sampler.d.ts.map +1 -1
- package/types/generation/parameters.d.ts +1 -1
- package/types/generation/parameters.d.ts.map +1 -1
- package/types/generation/streamers.d.ts +1 -0
- package/types/generation/streamers.d.ts.map +1 -1
- package/types/image_processors_utils.d.ts +18 -1
- package/types/image_processors_utils.d.ts.map +1 -1
- package/types/models/afmoe/modeling_afmoe.d.ts +8 -0
- package/types/models/afmoe/modeling_afmoe.d.ts.map +1 -0
- package/types/models/{ast/modeling_ast.d.ts → audio_spectrogram_transformer/modeling_audio_spectrogram_transformer.d.ts} +1 -1
- package/types/models/audio_spectrogram_transformer/modeling_audio_spectrogram_transformer.d.ts.map +1 -0
- package/types/models/auto/image_processing_auto.d.ts.map +1 -1
- package/types/models/auto/modeling_auto.d.ts +6 -0
- package/types/models/auto/modeling_auto.d.ts.map +1 -1
- package/types/models/auto/tokenization_auto.d.ts.map +1 -1
- package/types/models/chmv2/image_processing_chmv2.d.ts +4 -0
- package/types/models/chmv2/image_processing_chmv2.d.ts.map +1 -0
- package/types/models/chmv2/modeling_chmv2.d.ts +6 -0
- package/types/models/chmv2/modeling_chmv2.d.ts.map +1 -0
- package/types/models/clap/feature_extraction_clap.d.ts.map +1 -1
- package/types/models/cohere2/modeling_cohere2.d.ts +8 -0
- package/types/models/cohere2/modeling_cohere2.d.ts.map +1 -0
- package/types/models/cohere_asr/feature_extraction_cohere_asr.d.ts +25 -0
- package/types/models/cohere_asr/feature_extraction_cohere_asr.d.ts.map +1 -0
- package/types/models/cohere_asr/modeling_cohere_asr.d.ts +9 -0
- package/types/models/cohere_asr/modeling_cohere_asr.d.ts.map +1 -0
- package/types/models/cohere_asr/processing_cohere_asr.d.ts +27 -0
- package/types/models/cohere_asr/processing_cohere_asr.d.ts.map +1 -0
- package/types/models/cohere_asr/tokenization_cohere_asr.d.ts +4 -0
- package/types/models/cohere_asr/tokenization_cohere_asr.d.ts.map +1 -0
- package/types/models/deepseek_v3/modeling_deepseek_v3.d.ts +8 -0
- package/types/models/deepseek_v3/modeling_deepseek_v3.d.ts.map +1 -0
- package/types/models/detr/image_processing_detr.d.ts +1 -1
- package/types/models/eurobert/modeling_eurobert.d.ts +36 -0
- package/types/models/eurobert/modeling_eurobert.d.ts.map +1 -0
- package/types/models/feature_extractors.d.ts +3 -0
- package/types/models/gemma3/image_processing_gemma3.d.ts +4 -0
- package/types/models/gemma3/image_processing_gemma3.d.ts.map +1 -0
- package/types/models/gemma3/modeling_gemma3.d.ts +4 -1
- package/types/models/gemma3/modeling_gemma3.d.ts.map +1 -1
- package/types/models/gemma3/processing_gemma3.d.ts +20 -0
- package/types/models/gemma3/processing_gemma3.d.ts.map +1 -0
- package/types/models/gemma3n/modeling_gemma3n.d.ts +2 -0
- package/types/models/gemma3n/modeling_gemma3n.d.ts.map +1 -1
- package/types/models/glm46v/image_processing_glm46v.d.ts +4 -0
- package/types/models/glm46v/image_processing_glm46v.d.ts.map +1 -0
- package/types/models/glm46v/processing_glm46v.d.ts +4 -0
- package/types/models/glm46v/processing_glm46v.d.ts.map +1 -0
- package/types/models/glm_moe_dsa/modeling_glm_moe_dsa.d.ts +8 -0
- package/types/models/glm_moe_dsa/modeling_glm_moe_dsa.d.ts.map +1 -0
- package/types/models/glm_ocr/modeling_glm_ocr.d.ts +26 -0
- package/types/models/glm_ocr/modeling_glm_ocr.d.ts.map +1 -0
- package/types/models/granite_speech/feature_extraction_granite_speech.d.ts +16 -0
- package/types/models/granite_speech/feature_extraction_granite_speech.d.ts.map +1 -0
- package/types/models/granite_speech/modeling_granite_speech.d.ts +4 -0
- package/types/models/granite_speech/modeling_granite_speech.d.ts.map +1 -0
- package/types/models/granite_speech/processing_granite_speech.d.ts +19 -0
- package/types/models/granite_speech/processing_granite_speech.d.ts.map +1 -0
- package/types/models/grounding_dino/image_processing_grounding_dino.d.ts +1 -1
- package/types/models/idefics3/modeling_idefics3.d.ts +2 -18
- package/types/models/idefics3/modeling_idefics3.d.ts.map +1 -1
- package/types/models/image_processors.d.ts +4 -0
- package/types/models/lfm2_vl/image_processing_lfm2_vl.d.ts +41 -0
- package/types/models/lfm2_vl/image_processing_lfm2_vl.d.ts.map +1 -0
- package/types/models/lfm2_vl/modeling_lfm2_vl.d.ts +4 -0
- package/types/models/lfm2_vl/modeling_lfm2_vl.d.ts.map +1 -0
- package/types/models/lfm2_vl/processing_lfm2_vl.d.ts +18 -0
- package/types/models/lfm2_vl/processing_lfm2_vl.d.ts.map +1 -0
- package/types/models/lighton_ocr/modeling_lighton_ocr.d.ts +4 -0
- package/types/models/lighton_ocr/modeling_lighton_ocr.d.ts.map +1 -0
- package/types/models/marian/tokenization_marian.d.ts.map +1 -1
- package/types/models/mistral3/modeling_mistral3.d.ts +2 -2
- package/types/models/mistral3/modeling_mistral3.d.ts.map +1 -1
- package/types/models/mistral4/modeling_mistral4.d.ts +8 -0
- package/types/models/mistral4/modeling_mistral4.d.ts.map +1 -0
- package/types/models/modeling_utils.d.ts +46 -27
- package/types/models/modeling_utils.d.ts.map +1 -1
- package/types/models/models.d.ts +26 -1
- package/types/models/nemotron_h/modeling_nemotron_h.d.ts +8 -0
- package/types/models/nemotron_h/modeling_nemotron_h.d.ts.map +1 -0
- package/types/models/olmo_hybrid/modeling_olmo_hybrid.d.ts +8 -0
- package/types/models/olmo_hybrid/modeling_olmo_hybrid.d.ts.map +1 -0
- package/types/models/paligemma/modeling_paligemma.d.ts +2 -8
- package/types/models/paligemma/modeling_paligemma.d.ts.map +1 -1
- package/types/models/paligemma/processing_paligemma.d.ts.map +1 -1
- package/types/models/processors.d.ts +8 -0
- package/types/models/qwen2_5_vl/modeling_qwen2_5_vl.d.ts +7 -0
- package/types/models/qwen2_5_vl/modeling_qwen2_5_vl.d.ts.map +1 -0
- package/types/models/qwen2_5_vl/processing_qwen2_5_vl.d.ts +4 -0
- package/types/models/qwen2_5_vl/processing_qwen2_5_vl.d.ts.map +1 -0
- package/types/models/qwen2_moe/modeling_qwen2_moe.d.ts +8 -0
- package/types/models/qwen2_moe/modeling_qwen2_moe.d.ts.map +1 -0
- package/types/models/qwen2_vl/image_processing_qwen2_vl.d.ts +3 -0
- package/types/models/qwen2_vl/image_processing_qwen2_vl.d.ts.map +1 -1
- package/types/models/qwen2_vl/modeling_qwen2_vl.d.ts +44 -6
- package/types/models/qwen2_vl/modeling_qwen2_vl.d.ts.map +1 -1
- package/types/models/qwen2_vl/processing_qwen2_vl.d.ts +1 -0
- package/types/models/qwen2_vl/processing_qwen2_vl.d.ts.map +1 -1
- package/types/models/qwen3_5/modeling_qwen3_5.d.ts +6 -0
- package/types/models/qwen3_5/modeling_qwen3_5.d.ts.map +1 -0
- package/types/models/qwen3_5_moe/modeling_qwen3_5_moe.d.ts +7 -0
- package/types/models/qwen3_5_moe/modeling_qwen3_5_moe.d.ts.map +1 -0
- package/types/models/qwen3_moe/modeling_qwen3_moe.d.ts +8 -0
- package/types/models/qwen3_moe/modeling_qwen3_moe.d.ts.map +1 -0
- package/types/models/qwen3_next/modeling_qwen3_next.d.ts +8 -0
- package/types/models/qwen3_next/modeling_qwen3_next.d.ts.map +1 -0
- package/types/models/qwen3_vl/modeling_qwen3_vl.d.ts +7 -0
- package/types/models/qwen3_vl/modeling_qwen3_vl.d.ts.map +1 -0
- package/types/models/qwen3_vl/processing_qwen3_vl.d.ts +4 -0
- package/types/models/qwen3_vl/processing_qwen3_vl.d.ts.map +1 -0
- package/types/models/qwen3_vl_moe/modeling_qwen3_vl_moe.d.ts +7 -0
- package/types/models/qwen3_vl_moe/modeling_qwen3_vl_moe.d.ts.map +1 -0
- package/types/models/registry.d.ts +2 -1
- package/types/models/registry.d.ts.map +1 -1
- package/types/models/sam/image_processing_sam.d.ts +1 -1
- package/types/models/session.d.ts +3 -2
- package/types/models/session.d.ts.map +1 -1
- package/types/models/smolvlm/modeling_smolvlm.d.ts +8 -0
- package/types/models/smolvlm/modeling_smolvlm.d.ts.map +1 -0
- package/types/models/solar_open/modeling_solar_open.d.ts +8 -0
- package/types/models/solar_open/modeling_solar_open.d.ts.map +1 -0
- package/types/models/tokenizers.d.ts +1 -0
- package/types/models/ultravox/modeling_ultravox.d.ts +0 -2
- package/types/models/ultravox/modeling_ultravox.d.ts.map +1 -1
- package/types/models/voxtral/modeling_voxtral.d.ts +4 -0
- package/types/models/voxtral/modeling_voxtral.d.ts.map +1 -0
- package/types/models/voxtral_realtime/feature_extraction_voxtral_realtime.d.ts +28 -0
- package/types/models/voxtral_realtime/feature_extraction_voxtral_realtime.d.ts.map +1 -0
- package/types/models/voxtral_realtime/modeling_voxtral_realtime.d.ts +17 -0
- package/types/models/voxtral_realtime/modeling_voxtral_realtime.d.ts.map +1 -0
- package/types/models/voxtral_realtime/processing_voxtral_realtime.d.ts +44 -0
- package/types/models/voxtral_realtime/processing_voxtral_realtime.d.ts.map +1 -0
- package/types/models/whisper/feature_extraction_whisper.d.ts.map +1 -1
- package/types/models/whisper/modeling_whisper.d.ts.map +1 -1
- package/types/models/xlm/tokenization_xlm.d.ts.map +1 -1
- package/types/pipelines/automatic-speech-recognition.d.ts +7 -2
- package/types/pipelines/automatic-speech-recognition.d.ts.map +1 -1
- package/types/pipelines/document-question-answering.d.ts +2 -2
- package/types/pipelines/document-question-answering.d.ts.map +1 -1
- package/types/pipelines/image-to-text.d.ts +4 -4
- package/types/pipelines/image-to-text.d.ts.map +1 -1
- package/types/pipelines/index.d.ts +265 -0
- package/types/pipelines/index.d.ts.map +1 -0
- package/types/pipelines/summarization.d.ts +2 -2
- package/types/pipelines/summarization.d.ts.map +1 -1
- package/types/pipelines/text-generation.d.ts +7 -3
- package/types/pipelines/text-generation.d.ts.map +1 -1
- package/types/pipelines/text-to-audio.d.ts.map +1 -1
- package/types/pipelines/text2text-generation.d.ts +3 -3
- package/types/pipelines/text2text-generation.d.ts.map +1 -1
- package/types/pipelines/translation.d.ts +2 -2
- package/types/pipelines/translation.d.ts.map +1 -1
- package/types/pipelines/zero-shot-classification.d.ts.map +1 -1
- package/types/pipelines.d.ts +51 -291
- package/types/pipelines.d.ts.map +1 -1
- package/types/tokenization_utils.d.ts +44 -26
- package/types/tokenization_utils.d.ts.map +1 -1
- package/types/transformers.d.ts +7 -1
- package/types/transformers.d.ts.map +1 -1
- package/types/utils/audio.d.ts +5 -2
- package/types/utils/audio.d.ts.map +1 -1
- package/types/utils/cache/CrossOriginStorageCache.d.ts +120 -0
- package/types/utils/cache/CrossOriginStorageCache.d.ts.map +1 -0
- package/types/utils/cache/FileCache.d.ts +39 -0
- package/types/utils/cache/FileCache.d.ts.map +1 -0
- package/types/utils/cache.d.ts +10 -4
- package/types/utils/cache.d.ts.map +1 -1
- package/types/utils/core.d.ts +59 -2
- package/types/utils/core.d.ts.map +1 -1
- package/types/utils/devices.d.ts +15 -0
- package/types/utils/devices.d.ts.map +1 -1
- package/types/utils/dtypes.d.ts +17 -1
- package/types/utils/dtypes.d.ts.map +1 -1
- package/types/utils/hub/{files.d.ts → FileResponse.d.ts} +1 -32
- package/types/utils/hub/FileResponse.d.ts.map +1 -0
- package/types/utils/hub/utils.d.ts +19 -3
- package/types/utils/hub/utils.d.ts.map +1 -1
- package/types/utils/hub.d.ts +36 -7
- package/types/utils/hub.d.ts.map +1 -1
- package/types/utils/image.d.ts +1 -1
- package/types/utils/logger.d.ts +28 -0
- package/types/utils/logger.d.ts.map +1 -0
- package/types/utils/lru_cache.d.ts +38 -0
- package/types/utils/lru_cache.d.ts.map +1 -0
- package/types/utils/memoize_promise.d.ts +14 -0
- package/types/utils/memoize_promise.d.ts.map +1 -0
- package/types/utils/model-loader.d.ts +15 -0
- package/types/utils/model-loader.d.ts.map +1 -1
- package/types/utils/model_registry/ModelRegistry.d.ts +298 -0
- package/types/utils/model_registry/ModelRegistry.d.ts.map +1 -0
- package/types/utils/model_registry/clear_cache.d.ts +74 -0
- package/types/utils/model_registry/clear_cache.d.ts.map +1 -0
- package/types/utils/model_registry/get_available_dtypes.d.ts +26 -0
- package/types/utils/model_registry/get_available_dtypes.d.ts.map +1 -0
- package/types/utils/model_registry/get_file_metadata.d.ts +20 -0
- package/types/utils/model_registry/get_file_metadata.d.ts.map +1 -0
- package/types/utils/model_registry/get_files.d.ts +23 -0
- package/types/utils/model_registry/get_files.d.ts.map +1 -0
- package/types/utils/model_registry/get_model_files.d.ts +48 -0
- package/types/utils/model_registry/get_model_files.d.ts.map +1 -0
- package/types/utils/model_registry/get_pipeline_files.d.ts +22 -0
- package/types/utils/model_registry/get_pipeline_files.d.ts.map +1 -0
- package/types/utils/model_registry/get_processor_files.d.ts +9 -0
- package/types/utils/model_registry/get_processor_files.d.ts.map +1 -0
- package/types/utils/model_registry/get_tokenizer_files.d.ts +9 -0
- package/types/utils/model_registry/get_tokenizer_files.d.ts.map +1 -0
- package/types/utils/model_registry/is_cached.d.ts +105 -0
- package/types/utils/model_registry/is_cached.d.ts.map +1 -0
- package/types/utils/model_registry/resolve_model_type.d.ts +24 -0
- package/types/utils/model_registry/resolve_model_type.d.ts.map +1 -0
- package/types/utils/random.d.ts +86 -0
- package/types/utils/random.d.ts.map +1 -0
- package/types/utils/tensor.d.ts.map +1 -1
- package/src/utils/data-structures.js +0 -572
- package/types/models/ast/modeling_ast.d.ts.map +0 -1
- package/types/utils/data-structures.d.ts +0 -294
- package/types/utils/data-structures.d.ts.map +0 -1
- package/types/utils/hub/files.d.ts.map +0 -1
- /package/src/models/{ast/modeling_ast.js → audio_spectrogram_transformer/modeling_audio_spectrogram_transformer.js} +0 -0
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@huggingface/transformers",
|
|
3
|
-
"version": "4.0.0-next.
|
|
3
|
+
"version": "4.0.0-next.10",
|
|
4
4
|
"description": "State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server!",
|
|
5
|
-
"main": "./
|
|
5
|
+
"main": "./dist/transformers.node.cjs",
|
|
6
6
|
"types": "./types/transformers.d.ts",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"exports": {
|
|
@@ -43,10 +43,10 @@
|
|
|
43
43
|
},
|
|
44
44
|
"homepage": "https://github.com/huggingface/transformers.js#readme",
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@huggingface/jinja": "^0.5.
|
|
47
|
-
"@huggingface/tokenizers": "^0.1.
|
|
48
|
-
"onnxruntime-node": "1.24.
|
|
49
|
-
"onnxruntime-web": "1.
|
|
46
|
+
"@huggingface/jinja": "^0.5.6",
|
|
47
|
+
"@huggingface/tokenizers": "^0.1.3",
|
|
48
|
+
"onnxruntime-node": "1.24.3",
|
|
49
|
+
"onnxruntime-web": "1.25.0-dev.20260323-a99aad9d36",
|
|
50
50
|
"sharp": "^0.34.5"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
package/src/backends/onnx.js
CHANGED
|
@@ -16,13 +16,15 @@
|
|
|
16
16
|
* @module backends/onnx
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
-
import { env, apis } from '../env.js';
|
|
19
|
+
import { env, apis, LogLevel } from '../env.js';
|
|
20
20
|
|
|
21
21
|
// NOTE: Import order matters here. We need to import `onnxruntime-node` before `onnxruntime-web`.
|
|
22
22
|
// In either case, we select the default export if it exists, otherwise we use the named export.
|
|
23
23
|
import * as ONNX_NODE from 'onnxruntime-node';
|
|
24
24
|
import * as ONNX_WEB from 'onnxruntime-web/webgpu';
|
|
25
|
-
import {
|
|
25
|
+
import { loadWasmBinary, loadWasmFactory } from './utils/cacheWasm.js';
|
|
26
|
+
import { isBlobURL, toAbsoluteURL } from '../utils/hub/utils.js';
|
|
27
|
+
import { logger } from '../utils/logger.js';
|
|
26
28
|
export { Tensor } from 'onnxruntime-common';
|
|
27
29
|
|
|
28
30
|
/**
|
|
@@ -46,9 +48,48 @@ const DEVICE_TO_EXECUTION_PROVIDER_MAPPING = Object.freeze({
|
|
|
46
48
|
'webnn-cpu': { name: 'webnn', deviceType: 'cpu' }, // WebNN CPU
|
|
47
49
|
});
|
|
48
50
|
|
|
49
|
-
/**
|
|
50
|
-
|
|
51
|
-
|
|
51
|
+
/**
|
|
52
|
+
* Converts any LogLevel value to ONNX Runtime's numeric severity level (0-4).
|
|
53
|
+
* This handles both standard LogLevel values (10, 20, 30, 40, 50) and custom intermediate values.
|
|
54
|
+
*
|
|
55
|
+
* @param {number} logLevel - The LogLevel value to convert
|
|
56
|
+
* @returns {number} ONNX Runtime severity level (0-4)
|
|
57
|
+
*/
|
|
58
|
+
function getOnnxLogSeverityLevel(logLevel) {
|
|
59
|
+
// ONNX Runtime's log severity levels are defined as follows:
|
|
60
|
+
// (0) ORT_LOGGING_LEVEL_VERBOSE: Print all log messages.
|
|
61
|
+
// (1) ORT_LOGGING_LEVEL_INFO: Print info and higher level log messages.
|
|
62
|
+
// (2) ORT_LOGGING_LEVEL_WARNING: Print warning and higher level log messages.
|
|
63
|
+
// (3) ORT_LOGGING_LEVEL_ERROR: Print error log messages.
|
|
64
|
+
// (4) ORT_LOGGING_LEVEL_FATAL: Print only fatal log messages.
|
|
65
|
+
//
|
|
66
|
+
// In practice, ONNX Runtime's logging is extremely verbose (especially on session creation).
|
|
67
|
+
// For this reason, we map multiple LogLevel values to the same ONNX severity level to avoid
|
|
68
|
+
// overwhelming users with logs.
|
|
69
|
+
if (logLevel <= LogLevel.DEBUG) {
|
|
70
|
+
return 0; // ORT_LOGGING_LEVEL_VERBOSE
|
|
71
|
+
} else if (logLevel <= LogLevel.INFO) {
|
|
72
|
+
return 2; // ORT_LOGGING_LEVEL_WARNING
|
|
73
|
+
} else if (logLevel <= LogLevel.WARNING) {
|
|
74
|
+
return 3; // ORT_LOGGING_LEVEL_ERROR
|
|
75
|
+
} else if (logLevel <= LogLevel.ERROR) {
|
|
76
|
+
return 3; // ORT_LOGGING_LEVEL_ERROR
|
|
77
|
+
} else {
|
|
78
|
+
return 4; // ORT_LOGGING_LEVEL_FATAL
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Maps ONNX Runtime numeric severity levels to string log levels.
|
|
84
|
+
* @type {Record<0 | 1 | 2 | 3 | 4, 'verbose' | 'info' | 'warning' | 'error' | 'fatal'>}
|
|
85
|
+
*/
|
|
86
|
+
const ONNX_LOG_LEVEL_NAMES = {
|
|
87
|
+
0: 'verbose',
|
|
88
|
+
1: 'info',
|
|
89
|
+
2: 'warning',
|
|
90
|
+
3: 'error',
|
|
91
|
+
4: 'fatal',
|
|
92
|
+
};
|
|
52
93
|
|
|
53
94
|
/**
|
|
54
95
|
* The list of supported devices, sorted by priority/performance.
|
|
@@ -136,8 +177,6 @@ export function deviceToExecutionProviders(device = null) {
|
|
|
136
177
|
throw new Error(`Unsupported device: "${device}". Should be one of: ${supportedDevices.join(', ')}.`);
|
|
137
178
|
}
|
|
138
179
|
|
|
139
|
-
const IS_WEB_ENV = apis.IS_BROWSER_ENV || apis.IS_WEBWORKER_ENV;
|
|
140
|
-
|
|
141
180
|
/**
|
|
142
181
|
* Currently, Transformers.js doesn't support simultaneous loading of sessions in WASM/WebGPU.
|
|
143
182
|
* For this reason, we need to chain the loading calls.
|
|
@@ -164,14 +203,23 @@ async function ensureWasmLoaded() {
|
|
|
164
203
|
return wasmLoadPromise;
|
|
165
204
|
}
|
|
166
205
|
|
|
206
|
+
// Check if we should load the WASM binary
|
|
167
207
|
const shouldUseWasmCache =
|
|
168
208
|
env.useWasmCache &&
|
|
169
209
|
typeof ONNX_ENV?.wasm?.wasmPaths === 'object' &&
|
|
170
210
|
ONNX_ENV?.wasm?.wasmPaths?.wasm &&
|
|
171
211
|
ONNX_ENV?.wasm?.wasmPaths?.mjs;
|
|
172
212
|
|
|
173
|
-
// Check if we should load the WASM binary
|
|
174
213
|
if (!shouldUseWasmCache) {
|
|
214
|
+
// In Deno's web runtime, the WASM factory must be loaded via blob URL so that Node.js detection
|
|
215
|
+
// can be patched out (see loadWasmFactory). Without caching, the factory is imported directly
|
|
216
|
+
// from its URL and Deno would crash trying to use Node.js APIs. useWasmCache defaults to true
|
|
217
|
+
// in this environment, so this only happens if the user explicitly disables it.
|
|
218
|
+
if (apis.IS_DENO_WEB_RUNTIME) {
|
|
219
|
+
throw new Error(
|
|
220
|
+
"env.useWasmCache=false is not supported in Deno's web runtime. Remove the useWasmCache override.",
|
|
221
|
+
);
|
|
222
|
+
}
|
|
175
223
|
wasmLoadPromise = Promise.resolve();
|
|
176
224
|
return wasmLoadPromise;
|
|
177
225
|
}
|
|
@@ -182,7 +230,10 @@ async function ensureWasmLoaded() {
|
|
|
182
230
|
// shouldUseWasmCache checks for wasmPaths.wasm and wasmPaths.mjs
|
|
183
231
|
const urls = /** @type {{ wasm: string, mjs: string }} */ (ONNX_ENV.wasm.wasmPaths);
|
|
184
232
|
|
|
185
|
-
// Load
|
|
233
|
+
// Load both in parallel; the .mjs blob URL is only kept if wasmBinary succeeded.
|
|
234
|
+
// ORT only sets locateFile when wasmBinary is provided (onnxruntime PR https://github.com/microsoft/onnxruntime/pull/27411), which
|
|
235
|
+
// prevents new URL(fileName, import.meta.url) from failing inside a blob URL factory.
|
|
236
|
+
let wasmBinaryLoaded = false;
|
|
186
237
|
await Promise.all([
|
|
187
238
|
// Load and cache the WASM binary
|
|
188
239
|
urls.wasm && !isBlobURL(urls.wasm)
|
|
@@ -191,14 +242,15 @@ async function ensureWasmLoaded() {
|
|
|
191
242
|
const wasmBinary = await loadWasmBinary(toAbsoluteURL(urls.wasm));
|
|
192
243
|
if (wasmBinary) {
|
|
193
244
|
ONNX_ENV.wasm.wasmBinary = wasmBinary;
|
|
245
|
+
wasmBinaryLoaded = true;
|
|
194
246
|
}
|
|
195
247
|
} catch (err) {
|
|
196
|
-
|
|
248
|
+
logger.warn('Failed to pre-load WASM binary:', err);
|
|
197
249
|
}
|
|
198
250
|
})()
|
|
199
251
|
: Promise.resolve(),
|
|
200
252
|
|
|
201
|
-
// Load and cache the WASM factory
|
|
253
|
+
// Load and cache the WASM factory as a blob URL
|
|
202
254
|
urls.mjs && !isBlobURL(urls.mjs)
|
|
203
255
|
? (async () => {
|
|
204
256
|
try {
|
|
@@ -208,11 +260,17 @@ async function ensureWasmLoaded() {
|
|
|
208
260
|
ONNX_ENV.wasm.wasmPaths.mjs = wasmFactoryBlob;
|
|
209
261
|
}
|
|
210
262
|
} catch (err) {
|
|
211
|
-
|
|
263
|
+
logger.warn('Failed to pre-load WASM factory:', err);
|
|
212
264
|
}
|
|
213
265
|
})()
|
|
214
266
|
: Promise.resolve(),
|
|
215
267
|
]);
|
|
268
|
+
|
|
269
|
+
// If wasmBinary failed to load, revert wasmPaths.mjs to the original URL (factory can only be loaded from blob if ONNX_ENV.wasm.wasmBinary is set. @see ORT PR #27411)
|
|
270
|
+
if (!wasmBinaryLoaded) {
|
|
271
|
+
// @ts-ignore
|
|
272
|
+
ONNX_ENV.wasm.wasmPaths.mjs = urls.mjs;
|
|
273
|
+
}
|
|
216
274
|
})();
|
|
217
275
|
|
|
218
276
|
return wasmLoadPromise;
|
|
@@ -227,13 +285,14 @@ async function ensureWasmLoaded() {
|
|
|
227
285
|
*/
|
|
228
286
|
export async function createInferenceSession(buffer_or_path, session_options, session_config) {
|
|
229
287
|
await ensureWasmLoaded();
|
|
288
|
+
const logSeverityLevel = getOnnxLogSeverityLevel(env.logLevel ?? LogLevel.WARNING);
|
|
230
289
|
const load = () =>
|
|
231
290
|
InferenceSession.create(buffer_or_path, {
|
|
232
|
-
// Set default log level, but allow overriding through session options
|
|
233
|
-
logSeverityLevel
|
|
291
|
+
// Set default log severity level, but allow overriding through session options
|
|
292
|
+
logSeverityLevel,
|
|
234
293
|
...session_options,
|
|
235
294
|
});
|
|
236
|
-
const session = await (IS_WEB_ENV ? (webInitChain = webInitChain.then(load)) : load());
|
|
295
|
+
const session = await (apis.IS_WEB_ENV ? (webInitChain = webInitChain.then(load)) : load());
|
|
237
296
|
session.config = session_config;
|
|
238
297
|
return session;
|
|
239
298
|
}
|
|
@@ -253,8 +312,7 @@ let webInferenceChain = Promise.resolve();
|
|
|
253
312
|
*/
|
|
254
313
|
export async function runInferenceSession(session, ortFeed) {
|
|
255
314
|
const run = () => session.run(ortFeed);
|
|
256
|
-
|
|
257
|
-
return output;
|
|
315
|
+
return apis.IS_WEB_ENV ? (webInferenceChain = webInferenceChain.then(run)) : run();
|
|
258
316
|
}
|
|
259
317
|
|
|
260
318
|
/**
|
|
@@ -265,42 +323,8 @@ export async function runInferenceSession(session, ortFeed) {
|
|
|
265
323
|
export function isONNXTensor(x) {
|
|
266
324
|
return x instanceof ONNX.Tensor;
|
|
267
325
|
}
|
|
268
|
-
|
|
269
326
|
/** @type {import('onnxruntime-common').Env} */
|
|
270
327
|
const ONNX_ENV = ONNX?.env;
|
|
271
|
-
ONNX_ENV.logLevel = LOG_LEVELS[DEFAULT_LOG_LEVEL];
|
|
272
|
-
if (ONNX_ENV?.wasm) {
|
|
273
|
-
// Initialize wasm backend with suitable default settings.
|
|
274
|
-
|
|
275
|
-
// (Optional) Set path to wasm files. This will override the default path search behavior of onnxruntime-web.
|
|
276
|
-
// By default, we only do this if we are not in a service worker and the wasmPaths are not already set.
|
|
277
|
-
if (
|
|
278
|
-
// @ts-ignore Cannot find name 'ServiceWorkerGlobalScope'.ts(2304)
|
|
279
|
-
!(typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope) &&
|
|
280
|
-
ONNX_ENV.versions?.web &&
|
|
281
|
-
!ONNX_ENV.wasm.wasmPaths
|
|
282
|
-
) {
|
|
283
|
-
const wasmPathPrefix = `https://cdn.jsdelivr.net/npm/onnxruntime-web@${ONNX_ENV.versions.web}/dist/`;
|
|
284
|
-
|
|
285
|
-
ONNX_ENV.wasm.wasmPaths = apis.IS_SAFARI
|
|
286
|
-
? {
|
|
287
|
-
mjs: `${wasmPathPrefix}ort-wasm-simd-threaded.mjs`,
|
|
288
|
-
wasm: `${wasmPathPrefix}ort-wasm-simd-threaded.wasm`,
|
|
289
|
-
}
|
|
290
|
-
: {
|
|
291
|
-
mjs: `${wasmPathPrefix}ort-wasm-simd-threaded.asyncify.mjs`,
|
|
292
|
-
wasm: `${wasmPathPrefix}ort-wasm-simd-threaded.asyncify.wasm`,
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
// Users may wish to proxy the WASM backend to prevent the UI from freezing,
|
|
297
|
-
// However, this is not necessary when using WebGPU, so we default to false.
|
|
298
|
-
ONNX_ENV.wasm.proxy = false;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
if (ONNX_ENV?.webgpu) {
|
|
302
|
-
ONNX_ENV.webgpu.powerPreference = 'high-performance';
|
|
303
|
-
}
|
|
304
328
|
|
|
305
329
|
/**
|
|
306
330
|
* Check if ONNX's WASM backend is being proxied.
|
|
@@ -311,5 +335,56 @@ export function isONNXProxy() {
|
|
|
311
335
|
return ONNX_ENV?.wasm?.proxy;
|
|
312
336
|
}
|
|
313
337
|
|
|
314
|
-
|
|
315
|
-
|
|
338
|
+
if (ONNX_ENV) {
|
|
339
|
+
if (ONNX_ENV.wasm) {
|
|
340
|
+
// Initialize wasm backend with suitable default settings.
|
|
341
|
+
|
|
342
|
+
// (Optional) Set path to wasm files. This will override the default path search behavior of onnxruntime-web.
|
|
343
|
+
// By default, we only do this if we are not in a service worker and the wasmPaths are not already set.
|
|
344
|
+
if (
|
|
345
|
+
// @ts-ignore Cannot find name 'ServiceWorkerGlobalScope'.ts(2304)
|
|
346
|
+
!(typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope) &&
|
|
347
|
+
ONNX_ENV.versions?.web &&
|
|
348
|
+
!ONNX_ENV.wasm.wasmPaths
|
|
349
|
+
) {
|
|
350
|
+
const wasmPathPrefix = `https://cdn.jsdelivr.net/npm/onnxruntime-web@${ONNX_ENV.versions.web}/dist/`;
|
|
351
|
+
|
|
352
|
+
ONNX_ENV.wasm.wasmPaths = apis.IS_SAFARI
|
|
353
|
+
? {
|
|
354
|
+
mjs: `${wasmPathPrefix}ort-wasm-simd-threaded.mjs`,
|
|
355
|
+
wasm: `${wasmPathPrefix}ort-wasm-simd-threaded.wasm`,
|
|
356
|
+
}
|
|
357
|
+
: {
|
|
358
|
+
mjs: `${wasmPathPrefix}ort-wasm-simd-threaded.asyncify.mjs`,
|
|
359
|
+
wasm: `${wasmPathPrefix}ort-wasm-simd-threaded.asyncify.wasm`,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// Users may wish to proxy the WASM backend to prevent the UI from freezing,
|
|
364
|
+
// However, this is not necessary when using WebGPU, so we default to false.
|
|
365
|
+
ONNX_ENV.wasm.proxy = false;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
if (ONNX_ENV.webgpu) {
|
|
369
|
+
ONNX_ENV.webgpu.powerPreference = 'high-performance';
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* A function to map Transformers.js log levels to ONNX Runtime log severity
|
|
374
|
+
* levels, and set the log level environment variable in ONNX Runtime.
|
|
375
|
+
* @param {number} logLevel The log level to set.
|
|
376
|
+
*/
|
|
377
|
+
function setLogLevel(logLevel) {
|
|
378
|
+
const severityLevel = getOnnxLogSeverityLevel(logLevel);
|
|
379
|
+
ONNX_ENV.logLevel = ONNX_LOG_LEVEL_NAMES[severityLevel];
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// Set the initial log level to be the default Transformers.js log level.
|
|
383
|
+
setLogLevel(env.logLevel ?? LogLevel.WARNING);
|
|
384
|
+
|
|
385
|
+
// Expose ONNX environment variables to `env.backends.onnx`
|
|
386
|
+
env.backends.onnx = {
|
|
387
|
+
...ONNX_ENV,
|
|
388
|
+
setLogLevel,
|
|
389
|
+
};
|
|
390
|
+
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { apis, env } from '../../env.js';
|
|
1
2
|
import { getCache } from '../../utils/cache.js';
|
|
2
|
-
import {
|
|
3
|
+
import { logger } from '../../utils/logger.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Loads and caches a file from the given URL.
|
|
6
7
|
* @param {string} url The URL of the file to load.
|
|
7
|
-
* @returns {Promise<Response|import('../../utils/hub/
|
|
8
|
+
* @returns {Promise<Response|import('../../utils/hub/FileResponse.js').FileResponse|null|string>} The response object, or null if loading failed.
|
|
8
9
|
*/
|
|
9
10
|
async function loadAndCacheFile(url) {
|
|
10
11
|
const fileName = url.split('/').pop();
|
|
@@ -22,11 +23,11 @@ async function loadAndCacheFile(url) {
|
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
25
|
} catch (error) {
|
|
25
|
-
|
|
26
|
+
logger.warn(`Failed to load ${fileName} from cache:`, error);
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
// If not in cache, fetch it
|
|
29
|
-
const response = await fetch(url);
|
|
30
|
+
const response = await env.fetch(url);
|
|
30
31
|
|
|
31
32
|
if (!response.ok) {
|
|
32
33
|
throw new Error(`Failed to fetch ${fileName}: ${response.status} ${response.statusText}`);
|
|
@@ -37,7 +38,7 @@ async function loadAndCacheFile(url) {
|
|
|
37
38
|
try {
|
|
38
39
|
await cache.put(url, response.clone());
|
|
39
40
|
} catch (e) {
|
|
40
|
-
|
|
41
|
+
logger.warn(`Failed to cache ${fileName}:`, e);
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
44
|
|
|
@@ -57,63 +58,44 @@ export async function loadWasmBinary(wasmURL) {
|
|
|
57
58
|
try {
|
|
58
59
|
return await response.arrayBuffer();
|
|
59
60
|
} catch (error) {
|
|
60
|
-
|
|
61
|
+
logger.warn('Failed to read WASM binary:', error);
|
|
61
62
|
return null;
|
|
62
63
|
}
|
|
63
64
|
}
|
|
64
65
|
|
|
65
66
|
/**
|
|
66
|
-
* Loads and caches the WASM Factory for ONNX Runtime.
|
|
67
|
+
* Loads and caches the WASM Factory (.mjs file) for ONNX Runtime.
|
|
68
|
+
* Creates a blob URL from cached content (when safe) to bridge Cache API with dynamic imports used in ORT.
|
|
67
69
|
* @param {string} libURL The URL of the WASM Factory to load.
|
|
68
|
-
* @returns {Promise<string|null>} The blob URL
|
|
70
|
+
* @returns {Promise<string|null>} The blob URL (if enabled), original URL (if disabled), or null if loading failed.
|
|
69
71
|
*/
|
|
70
72
|
export async function loadWasmFactory(libURL) {
|
|
73
|
+
// We can't use Blob URLs in some environments (Service Workers, Chrome extensions) due to security restrictions on dynamic import() of blob URLs.
|
|
74
|
+
// In such cases, just return the original URL and don't bother caching since dynamic import() won't use the Cache API anyway.
|
|
75
|
+
// See https://github.com/huggingface/transformers.js/issues/1532.
|
|
76
|
+
if (apis.IS_SERVICE_WORKER_ENV || apis.IS_CHROME_AVAILABLE) {
|
|
77
|
+
return libURL;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Fetch from cache or network, then create blob URL
|
|
71
81
|
const response = await loadAndCacheFile(libURL);
|
|
72
82
|
if (!response || typeof response === 'string') return null;
|
|
73
83
|
|
|
74
84
|
try {
|
|
75
85
|
let code = await response.text();
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
86
|
+
|
|
87
|
+
// Handle the case where we are importing the bundled version of the library in Deno (e.g., via CDN or local file),
|
|
88
|
+
// where we need to patch out Node.js detection in the factory. Without this, Deno (which exposes globalThis.process.versions.node)
|
|
89
|
+
// would enter the Node.js branch and try to use Node.js APIs (worker_threads, fs, etc.) that aren't used in the bundled web version.
|
|
90
|
+
// Only needed for the asyncify (single-threaded) variant loaded via blob URL. The module-level pthread auto-start code is unreachable since asyncify never spawns workers.
|
|
91
|
+
// See https://github.com/huggingface/transformers.js/pull/1546/ for more information.
|
|
92
|
+
//
|
|
93
|
+
// NOTE: This does not affect default usage via Deno (i.e., imported via npm: prefix), since we'll be using onnxruntime-node (Native) instead of onnxruntime-web (WASM).
|
|
94
|
+
code = code.replaceAll('globalThis.process?.versions?.node', 'false');
|
|
79
95
|
const blob = new Blob([code], { type: 'text/javascript' });
|
|
80
96
|
return URL.createObjectURL(blob);
|
|
81
97
|
} catch (error) {
|
|
82
|
-
|
|
98
|
+
logger.warn('Failed to read WASM factory:', error);
|
|
83
99
|
return null;
|
|
84
100
|
}
|
|
85
101
|
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Checks if the given URL is a blob URL (created via URL.createObjectURL).
|
|
89
|
-
* Blob URLs should not be cached as they are temporary in-memory references.
|
|
90
|
-
* @param {string} url - The URL to check.
|
|
91
|
-
* @returns {boolean} True if the URL is a blob URL, false otherwise.
|
|
92
|
-
*/
|
|
93
|
-
export function isBlobURL(url) {
|
|
94
|
-
return isValidUrl(url, ['blob:']);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Converts any URL to an absolute URL if needed.
|
|
99
|
-
* If the URL is already absolute (http://, https://, or blob:), returns it unchanged (handled by new URL(...)).
|
|
100
|
-
* Otherwise, resolves it relative to the current page location (browser) or module location (Node/Bun/Deno).
|
|
101
|
-
* @param {string} url - The URL to convert (can be relative or absolute).
|
|
102
|
-
* @returns {string} The absolute URL.
|
|
103
|
-
*/
|
|
104
|
-
export function toAbsoluteURL(url) {
|
|
105
|
-
let baseURL;
|
|
106
|
-
|
|
107
|
-
if (typeof location !== 'undefined' && location.href) {
|
|
108
|
-
// Browser environment: use location.href
|
|
109
|
-
baseURL = location.href;
|
|
110
|
-
} else if (typeof import.meta !== 'undefined' && import.meta.url) {
|
|
111
|
-
// Node.js/Bun/Deno module environment: use import.meta.url
|
|
112
|
-
baseURL = import.meta.url;
|
|
113
|
-
} else {
|
|
114
|
-
// Fallback: if no base is available, return the URL unchanged
|
|
115
|
-
return url;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
return new URL(url, baseURL).href;
|
|
119
|
-
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Tensor } from './utils/tensor.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A cache class that stores past key values as named tensors.
|
|
5
|
+
*/
|
|
6
|
+
class _DynamicCache {
|
|
7
|
+
/**
|
|
8
|
+
* Create a DynamicCache, optionally pre-populated with entries.
|
|
9
|
+
* @param {Record<string, Tensor>} [entries] Initial name→Tensor mappings.
|
|
10
|
+
*/
|
|
11
|
+
constructor(entries) {
|
|
12
|
+
if (!entries) return;
|
|
13
|
+
for (const key in entries) {
|
|
14
|
+
if (key in this) {
|
|
15
|
+
throw new TypeError(`Key "${key}" conflicts with an existing property on DynamicCache`);
|
|
16
|
+
}
|
|
17
|
+
const value = entries[key];
|
|
18
|
+
if (!(value instanceof Tensor)) {
|
|
19
|
+
throw new TypeError(`Expected a Tensor for key "${key}", got ${typeof value}`);
|
|
20
|
+
}
|
|
21
|
+
this[key] = value;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Get the cached sequence length. This requires at least one attention cache entry to be present.
|
|
27
|
+
* @returns {number} The past sequence length.
|
|
28
|
+
*/
|
|
29
|
+
get_seq_length() {
|
|
30
|
+
/** @type {Record<string, Tensor>} */
|
|
31
|
+
const self = /** @type {any} */ (this);
|
|
32
|
+
for (const name in self) {
|
|
33
|
+
if (name.startsWith('past_key_values.')) {
|
|
34
|
+
return self[name].dims.at(-2);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
throw new Error('Unable to determine sequence length from the cache.');
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Dispose all contained tensors whose data resides on the GPU.
|
|
42
|
+
* Returns a promise that resolves when all disposals are complete.
|
|
43
|
+
* @returns {Promise<void>} Promise that resolves when all GPU tensors are disposed.
|
|
44
|
+
*/
|
|
45
|
+
async dispose() {
|
|
46
|
+
const promises = [];
|
|
47
|
+
for (const t of /** @type {Tensor[]} */ (Object.values(this))) {
|
|
48
|
+
if (t.location === 'gpu-buffer') {
|
|
49
|
+
promises.push(t.dispose());
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
await Promise.all(promises);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @typedef {_DynamicCache & Record<string, Tensor>} DynamicCache
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
export const DynamicCache = /** @type {new (entries?: Record<string, Tensor>) => DynamicCache} */ (
|
|
61
|
+
/** @type {unknown} */ (_DynamicCache)
|
|
62
|
+
);
|