@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.
Files changed (364) hide show
  1. package/README.md +32 -6
  2. package/dist/ort-wasm-simd-threaded.jsep.mjs +31 -31
  3. package/dist/transformers.js +9261 -1709
  4. package/dist/transformers.min.js +25 -18
  5. package/dist/transformers.node.cjs +6119 -3174
  6. package/dist/transformers.node.min.cjs +25 -23
  7. package/dist/transformers.node.min.mjs +25 -23
  8. package/dist/transformers.node.mjs +6034 -3168
  9. package/dist/transformers.web.js +4255 -1381
  10. package/dist/transformers.web.min.js +23 -19
  11. package/package.json +6 -6
  12. package/src/backends/onnx.js +128 -53
  13. package/src/backends/utils/cacheWasm.js +28 -46
  14. package/src/cache_utils.js +62 -0
  15. package/src/configs.js +123 -23
  16. package/src/env.js +100 -11
  17. package/src/generation/logits_sampler.js +3 -15
  18. package/src/generation/parameters.js +1 -1
  19. package/src/generation/streamers.js +21 -0
  20. package/src/image_processors_utils.js +29 -23
  21. package/src/models/afmoe/modeling_afmoe.js +5 -0
  22. package/src/models/auto/image_processing_auto.js +2 -1
  23. package/src/models/auto/modeling_auto.js +16 -2
  24. package/src/models/auto/tokenization_auto.js +2 -1
  25. package/src/models/chatterbox/modeling_chatterbox.js +1 -1
  26. package/src/models/chmv2/image_processing_chmv2.js +3 -0
  27. package/src/models/chmv2/modeling_chmv2.js +4 -0
  28. package/src/models/clap/feature_extraction_clap.js +2 -1
  29. package/src/models/cohere2/modeling_cohere2.js +5 -0
  30. package/src/models/cohere_asr/feature_extraction_cohere_asr.js +117 -0
  31. package/src/models/cohere_asr/modeling_cohere_asr.js +11 -0
  32. package/src/models/cohere_asr/processing_cohere_asr.js +55 -0
  33. package/src/models/cohere_asr/tokenization_cohere_asr.js +3 -0
  34. package/src/models/deepseek_v3/modeling_deepseek_v3.js +5 -0
  35. package/src/models/detr/image_processing_detr.js +1 -1
  36. package/src/models/eurobert/modeling_eurobert.js +41 -0
  37. package/src/models/feature_extractors.js +3 -0
  38. package/src/models/gemma3/image_processing_gemma3.js +3 -0
  39. package/src/models/gemma3/modeling_gemma3.js +4 -1
  40. package/src/models/gemma3/processing_gemma3.js +45 -0
  41. package/src/models/gemma3n/modeling_gemma3n.js +2 -0
  42. package/src/models/glm46v/image_processing_glm46v.js +12 -0
  43. package/src/models/glm46v/processing_glm46v.js +5 -0
  44. package/src/models/glm_moe_dsa/modeling_glm_moe_dsa.js +5 -0
  45. package/src/models/glm_ocr/modeling_glm_ocr.js +78 -0
  46. package/src/models/granite_speech/feature_extraction_granite_speech.js +58 -0
  47. package/src/models/granite_speech/modeling_granite_speech.js +5 -0
  48. package/src/models/granite_speech/processing_granite_speech.js +62 -0
  49. package/src/models/grounding_dino/image_processing_grounding_dino.js +1 -1
  50. package/src/models/idefics3/modeling_idefics3.js +5 -32
  51. package/src/models/image_processors.js +4 -0
  52. package/src/models/lfm2_vl/image_processing_lfm2_vl.js +305 -0
  53. package/src/models/lfm2_vl/modeling_lfm2_vl.js +13 -0
  54. package/src/models/lfm2_vl/processing_lfm2_vl.js +77 -0
  55. package/src/models/lighton_ocr/modeling_lighton_ocr.js +3 -0
  56. package/src/models/llava/modeling_llava.js +1 -1
  57. package/src/models/marian/tokenization_marian.js +3 -2
  58. package/src/models/mistral3/modeling_mistral3.js +2 -2
  59. package/src/models/mistral4/modeling_mistral4.js +5 -0
  60. package/src/models/modeling_utils.js +283 -300
  61. package/src/models/models.js +26 -1
  62. package/src/models/nemotron_h/modeling_nemotron_h.js +5 -0
  63. package/src/models/olmo_hybrid/modeling_olmo_hybrid.js +5 -0
  64. package/src/models/paligemma/modeling_paligemma.js +2 -25
  65. package/src/models/paligemma/processing_paligemma.js +3 -2
  66. package/src/models/processors.js +8 -0
  67. package/src/models/qwen2_5_vl/modeling_qwen2_5_vl.js +9 -0
  68. package/src/models/qwen2_5_vl/processing_qwen2_5_vl.js +3 -0
  69. package/src/models/qwen2_moe/modeling_qwen2_moe.js +5 -0
  70. package/src/models/qwen2_vl/image_processing_qwen2_vl.js +15 -1
  71. package/src/models/qwen2_vl/modeling_qwen2_vl.js +240 -143
  72. package/src/models/qwen2_vl/processing_qwen2_vl.js +5 -4
  73. package/src/models/qwen3_5/modeling_qwen3_5.js +4 -0
  74. package/src/models/qwen3_5_moe/modeling_qwen3_5_moe.js +4 -0
  75. package/src/models/qwen3_moe/modeling_qwen3_moe.js +5 -0
  76. package/src/models/qwen3_next/modeling_qwen3_next.js +5 -0
  77. package/src/models/qwen3_vl/modeling_qwen3_vl.js +4 -0
  78. package/src/models/qwen3_vl/processing_qwen3_vl.js +3 -0
  79. package/src/models/qwen3_vl_moe/modeling_qwen3_vl_moe.js +4 -0
  80. package/src/models/registry.js +61 -5
  81. package/src/models/sam/image_processing_sam.js +1 -1
  82. package/src/models/session.js +33 -56
  83. package/src/models/smolvlm/modeling_smolvlm.js +7 -0
  84. package/src/models/solar_open/modeling_solar_open.js +5 -0
  85. package/src/models/tokenizers.js +1 -0
  86. package/src/models/ultravox/modeling_ultravox.js +1 -3
  87. package/src/models/voxtral/modeling_voxtral.js +3 -0
  88. package/src/models/voxtral_realtime/feature_extraction_voxtral_realtime.js +71 -0
  89. package/src/models/voxtral_realtime/modeling_voxtral_realtime.js +239 -0
  90. package/src/models/voxtral_realtime/processing_voxtral_realtime.js +113 -0
  91. package/src/models/whisper/feature_extraction_whisper.js +4 -13
  92. package/src/models/whisper/modeling_whisper.js +6 -5
  93. package/src/models/xlm/tokenization_xlm.js +2 -1
  94. package/src/pipelines/automatic-speech-recognition.js +47 -3
  95. package/src/pipelines/document-question-answering.js +1 -1
  96. package/src/pipelines/image-to-text.js +2 -2
  97. package/src/pipelines/index.js +313 -0
  98. package/src/pipelines/summarization.js +1 -1
  99. package/src/pipelines/text-generation.js +5 -1
  100. package/src/pipelines/text-to-audio.js +4 -2
  101. package/src/pipelines/text2text-generation.js +1 -1
  102. package/src/pipelines/translation.js +1 -1
  103. package/src/pipelines/zero-shot-classification.js +3 -2
  104. package/src/pipelines.js +140 -428
  105. package/src/tokenization_utils.js +42 -21
  106. package/src/transformers.js +10 -1
  107. package/src/utils/audio.js +20 -3
  108. package/src/utils/cache/CrossOriginStorageCache.js +251 -0
  109. package/src/utils/cache/FileCache.js +128 -0
  110. package/src/utils/cache/cross-origin-storage.d.ts +38 -0
  111. package/src/utils/cache.js +12 -4
  112. package/src/utils/core.js +23 -1
  113. package/src/utils/devices.js +22 -0
  114. package/src/utils/dtypes.js +55 -0
  115. package/src/utils/hub/{files.js → FileResponse.js} +0 -90
  116. package/src/utils/hub/utils.js +45 -5
  117. package/src/utils/hub.js +67 -23
  118. package/src/utils/image.js +14 -14
  119. package/src/utils/logger.js +67 -0
  120. package/src/utils/lru_cache.js +67 -0
  121. package/src/utils/memoize_promise.js +45 -0
  122. package/src/utils/model-loader.js +35 -17
  123. package/src/utils/model_registry/ModelRegistry.js +382 -0
  124. package/src/utils/model_registry/clear_cache.js +128 -0
  125. package/src/utils/model_registry/get_available_dtypes.js +68 -0
  126. package/src/utils/model_registry/get_file_metadata.js +162 -0
  127. package/src/utils/model_registry/get_files.js +42 -0
  128. package/src/utils/model_registry/get_model_files.js +114 -0
  129. package/src/utils/model_registry/get_pipeline_files.js +44 -0
  130. package/src/utils/model_registry/get_processor_files.js +20 -0
  131. package/src/utils/model_registry/get_tokenizer_files.js +21 -0
  132. package/src/utils/model_registry/is_cached.js +169 -0
  133. package/src/utils/model_registry/resolve_model_type.js +66 -0
  134. package/src/utils/random.js +225 -0
  135. package/src/utils/tensor.js +26 -23
  136. package/src/utils/video.js +2 -2
  137. package/types/backends/onnx.d.ts.map +1 -1
  138. package/types/backends/utils/cacheWasm.d.ts +3 -17
  139. package/types/backends/utils/cacheWasm.d.ts.map +1 -1
  140. package/types/cache_utils.d.ts +29 -0
  141. package/types/cache_utils.d.ts.map +1 -0
  142. package/types/configs.d.ts.map +1 -1
  143. package/types/env.d.ts +60 -27
  144. package/types/env.d.ts.map +1 -1
  145. package/types/generation/logits_sampler.d.ts +2 -2
  146. package/types/generation/logits_sampler.d.ts.map +1 -1
  147. package/types/generation/parameters.d.ts +1 -1
  148. package/types/generation/parameters.d.ts.map +1 -1
  149. package/types/generation/streamers.d.ts +1 -0
  150. package/types/generation/streamers.d.ts.map +1 -1
  151. package/types/image_processors_utils.d.ts +18 -1
  152. package/types/image_processors_utils.d.ts.map +1 -1
  153. package/types/models/afmoe/modeling_afmoe.d.ts +8 -0
  154. package/types/models/afmoe/modeling_afmoe.d.ts.map +1 -0
  155. package/types/models/{ast/modeling_ast.d.ts → audio_spectrogram_transformer/modeling_audio_spectrogram_transformer.d.ts} +1 -1
  156. package/types/models/audio_spectrogram_transformer/modeling_audio_spectrogram_transformer.d.ts.map +1 -0
  157. package/types/models/auto/image_processing_auto.d.ts.map +1 -1
  158. package/types/models/auto/modeling_auto.d.ts +6 -0
  159. package/types/models/auto/modeling_auto.d.ts.map +1 -1
  160. package/types/models/auto/tokenization_auto.d.ts.map +1 -1
  161. package/types/models/chmv2/image_processing_chmv2.d.ts +4 -0
  162. package/types/models/chmv2/image_processing_chmv2.d.ts.map +1 -0
  163. package/types/models/chmv2/modeling_chmv2.d.ts +6 -0
  164. package/types/models/chmv2/modeling_chmv2.d.ts.map +1 -0
  165. package/types/models/clap/feature_extraction_clap.d.ts.map +1 -1
  166. package/types/models/cohere2/modeling_cohere2.d.ts +8 -0
  167. package/types/models/cohere2/modeling_cohere2.d.ts.map +1 -0
  168. package/types/models/cohere_asr/feature_extraction_cohere_asr.d.ts +25 -0
  169. package/types/models/cohere_asr/feature_extraction_cohere_asr.d.ts.map +1 -0
  170. package/types/models/cohere_asr/modeling_cohere_asr.d.ts +9 -0
  171. package/types/models/cohere_asr/modeling_cohere_asr.d.ts.map +1 -0
  172. package/types/models/cohere_asr/processing_cohere_asr.d.ts +27 -0
  173. package/types/models/cohere_asr/processing_cohere_asr.d.ts.map +1 -0
  174. package/types/models/cohere_asr/tokenization_cohere_asr.d.ts +4 -0
  175. package/types/models/cohere_asr/tokenization_cohere_asr.d.ts.map +1 -0
  176. package/types/models/deepseek_v3/modeling_deepseek_v3.d.ts +8 -0
  177. package/types/models/deepseek_v3/modeling_deepseek_v3.d.ts.map +1 -0
  178. package/types/models/detr/image_processing_detr.d.ts +1 -1
  179. package/types/models/eurobert/modeling_eurobert.d.ts +36 -0
  180. package/types/models/eurobert/modeling_eurobert.d.ts.map +1 -0
  181. package/types/models/feature_extractors.d.ts +3 -0
  182. package/types/models/gemma3/image_processing_gemma3.d.ts +4 -0
  183. package/types/models/gemma3/image_processing_gemma3.d.ts.map +1 -0
  184. package/types/models/gemma3/modeling_gemma3.d.ts +4 -1
  185. package/types/models/gemma3/modeling_gemma3.d.ts.map +1 -1
  186. package/types/models/gemma3/processing_gemma3.d.ts +20 -0
  187. package/types/models/gemma3/processing_gemma3.d.ts.map +1 -0
  188. package/types/models/gemma3n/modeling_gemma3n.d.ts +2 -0
  189. package/types/models/gemma3n/modeling_gemma3n.d.ts.map +1 -1
  190. package/types/models/glm46v/image_processing_glm46v.d.ts +4 -0
  191. package/types/models/glm46v/image_processing_glm46v.d.ts.map +1 -0
  192. package/types/models/glm46v/processing_glm46v.d.ts +4 -0
  193. package/types/models/glm46v/processing_glm46v.d.ts.map +1 -0
  194. package/types/models/glm_moe_dsa/modeling_glm_moe_dsa.d.ts +8 -0
  195. package/types/models/glm_moe_dsa/modeling_glm_moe_dsa.d.ts.map +1 -0
  196. package/types/models/glm_ocr/modeling_glm_ocr.d.ts +26 -0
  197. package/types/models/glm_ocr/modeling_glm_ocr.d.ts.map +1 -0
  198. package/types/models/granite_speech/feature_extraction_granite_speech.d.ts +16 -0
  199. package/types/models/granite_speech/feature_extraction_granite_speech.d.ts.map +1 -0
  200. package/types/models/granite_speech/modeling_granite_speech.d.ts +4 -0
  201. package/types/models/granite_speech/modeling_granite_speech.d.ts.map +1 -0
  202. package/types/models/granite_speech/processing_granite_speech.d.ts +19 -0
  203. package/types/models/granite_speech/processing_granite_speech.d.ts.map +1 -0
  204. package/types/models/grounding_dino/image_processing_grounding_dino.d.ts +1 -1
  205. package/types/models/idefics3/modeling_idefics3.d.ts +2 -18
  206. package/types/models/idefics3/modeling_idefics3.d.ts.map +1 -1
  207. package/types/models/image_processors.d.ts +4 -0
  208. package/types/models/lfm2_vl/image_processing_lfm2_vl.d.ts +41 -0
  209. package/types/models/lfm2_vl/image_processing_lfm2_vl.d.ts.map +1 -0
  210. package/types/models/lfm2_vl/modeling_lfm2_vl.d.ts +4 -0
  211. package/types/models/lfm2_vl/modeling_lfm2_vl.d.ts.map +1 -0
  212. package/types/models/lfm2_vl/processing_lfm2_vl.d.ts +18 -0
  213. package/types/models/lfm2_vl/processing_lfm2_vl.d.ts.map +1 -0
  214. package/types/models/lighton_ocr/modeling_lighton_ocr.d.ts +4 -0
  215. package/types/models/lighton_ocr/modeling_lighton_ocr.d.ts.map +1 -0
  216. package/types/models/marian/tokenization_marian.d.ts.map +1 -1
  217. package/types/models/mistral3/modeling_mistral3.d.ts +2 -2
  218. package/types/models/mistral3/modeling_mistral3.d.ts.map +1 -1
  219. package/types/models/mistral4/modeling_mistral4.d.ts +8 -0
  220. package/types/models/mistral4/modeling_mistral4.d.ts.map +1 -0
  221. package/types/models/modeling_utils.d.ts +46 -27
  222. package/types/models/modeling_utils.d.ts.map +1 -1
  223. package/types/models/models.d.ts +26 -1
  224. package/types/models/nemotron_h/modeling_nemotron_h.d.ts +8 -0
  225. package/types/models/nemotron_h/modeling_nemotron_h.d.ts.map +1 -0
  226. package/types/models/olmo_hybrid/modeling_olmo_hybrid.d.ts +8 -0
  227. package/types/models/olmo_hybrid/modeling_olmo_hybrid.d.ts.map +1 -0
  228. package/types/models/paligemma/modeling_paligemma.d.ts +2 -8
  229. package/types/models/paligemma/modeling_paligemma.d.ts.map +1 -1
  230. package/types/models/paligemma/processing_paligemma.d.ts.map +1 -1
  231. package/types/models/processors.d.ts +8 -0
  232. package/types/models/qwen2_5_vl/modeling_qwen2_5_vl.d.ts +7 -0
  233. package/types/models/qwen2_5_vl/modeling_qwen2_5_vl.d.ts.map +1 -0
  234. package/types/models/qwen2_5_vl/processing_qwen2_5_vl.d.ts +4 -0
  235. package/types/models/qwen2_5_vl/processing_qwen2_5_vl.d.ts.map +1 -0
  236. package/types/models/qwen2_moe/modeling_qwen2_moe.d.ts +8 -0
  237. package/types/models/qwen2_moe/modeling_qwen2_moe.d.ts.map +1 -0
  238. package/types/models/qwen2_vl/image_processing_qwen2_vl.d.ts +3 -0
  239. package/types/models/qwen2_vl/image_processing_qwen2_vl.d.ts.map +1 -1
  240. package/types/models/qwen2_vl/modeling_qwen2_vl.d.ts +44 -6
  241. package/types/models/qwen2_vl/modeling_qwen2_vl.d.ts.map +1 -1
  242. package/types/models/qwen2_vl/processing_qwen2_vl.d.ts +1 -0
  243. package/types/models/qwen2_vl/processing_qwen2_vl.d.ts.map +1 -1
  244. package/types/models/qwen3_5/modeling_qwen3_5.d.ts +6 -0
  245. package/types/models/qwen3_5/modeling_qwen3_5.d.ts.map +1 -0
  246. package/types/models/qwen3_5_moe/modeling_qwen3_5_moe.d.ts +7 -0
  247. package/types/models/qwen3_5_moe/modeling_qwen3_5_moe.d.ts.map +1 -0
  248. package/types/models/qwen3_moe/modeling_qwen3_moe.d.ts +8 -0
  249. package/types/models/qwen3_moe/modeling_qwen3_moe.d.ts.map +1 -0
  250. package/types/models/qwen3_next/modeling_qwen3_next.d.ts +8 -0
  251. package/types/models/qwen3_next/modeling_qwen3_next.d.ts.map +1 -0
  252. package/types/models/qwen3_vl/modeling_qwen3_vl.d.ts +7 -0
  253. package/types/models/qwen3_vl/modeling_qwen3_vl.d.ts.map +1 -0
  254. package/types/models/qwen3_vl/processing_qwen3_vl.d.ts +4 -0
  255. package/types/models/qwen3_vl/processing_qwen3_vl.d.ts.map +1 -0
  256. package/types/models/qwen3_vl_moe/modeling_qwen3_vl_moe.d.ts +7 -0
  257. package/types/models/qwen3_vl_moe/modeling_qwen3_vl_moe.d.ts.map +1 -0
  258. package/types/models/registry.d.ts +2 -1
  259. package/types/models/registry.d.ts.map +1 -1
  260. package/types/models/sam/image_processing_sam.d.ts +1 -1
  261. package/types/models/session.d.ts +3 -2
  262. package/types/models/session.d.ts.map +1 -1
  263. package/types/models/smolvlm/modeling_smolvlm.d.ts +8 -0
  264. package/types/models/smolvlm/modeling_smolvlm.d.ts.map +1 -0
  265. package/types/models/solar_open/modeling_solar_open.d.ts +8 -0
  266. package/types/models/solar_open/modeling_solar_open.d.ts.map +1 -0
  267. package/types/models/tokenizers.d.ts +1 -0
  268. package/types/models/ultravox/modeling_ultravox.d.ts +0 -2
  269. package/types/models/ultravox/modeling_ultravox.d.ts.map +1 -1
  270. package/types/models/voxtral/modeling_voxtral.d.ts +4 -0
  271. package/types/models/voxtral/modeling_voxtral.d.ts.map +1 -0
  272. package/types/models/voxtral_realtime/feature_extraction_voxtral_realtime.d.ts +28 -0
  273. package/types/models/voxtral_realtime/feature_extraction_voxtral_realtime.d.ts.map +1 -0
  274. package/types/models/voxtral_realtime/modeling_voxtral_realtime.d.ts +17 -0
  275. package/types/models/voxtral_realtime/modeling_voxtral_realtime.d.ts.map +1 -0
  276. package/types/models/voxtral_realtime/processing_voxtral_realtime.d.ts +44 -0
  277. package/types/models/voxtral_realtime/processing_voxtral_realtime.d.ts.map +1 -0
  278. package/types/models/whisper/feature_extraction_whisper.d.ts.map +1 -1
  279. package/types/models/whisper/modeling_whisper.d.ts.map +1 -1
  280. package/types/models/xlm/tokenization_xlm.d.ts.map +1 -1
  281. package/types/pipelines/automatic-speech-recognition.d.ts +7 -2
  282. package/types/pipelines/automatic-speech-recognition.d.ts.map +1 -1
  283. package/types/pipelines/document-question-answering.d.ts +2 -2
  284. package/types/pipelines/document-question-answering.d.ts.map +1 -1
  285. package/types/pipelines/image-to-text.d.ts +4 -4
  286. package/types/pipelines/image-to-text.d.ts.map +1 -1
  287. package/types/pipelines/index.d.ts +265 -0
  288. package/types/pipelines/index.d.ts.map +1 -0
  289. package/types/pipelines/summarization.d.ts +2 -2
  290. package/types/pipelines/summarization.d.ts.map +1 -1
  291. package/types/pipelines/text-generation.d.ts +7 -3
  292. package/types/pipelines/text-generation.d.ts.map +1 -1
  293. package/types/pipelines/text-to-audio.d.ts.map +1 -1
  294. package/types/pipelines/text2text-generation.d.ts +3 -3
  295. package/types/pipelines/text2text-generation.d.ts.map +1 -1
  296. package/types/pipelines/translation.d.ts +2 -2
  297. package/types/pipelines/translation.d.ts.map +1 -1
  298. package/types/pipelines/zero-shot-classification.d.ts.map +1 -1
  299. package/types/pipelines.d.ts +51 -291
  300. package/types/pipelines.d.ts.map +1 -1
  301. package/types/tokenization_utils.d.ts +44 -26
  302. package/types/tokenization_utils.d.ts.map +1 -1
  303. package/types/transformers.d.ts +7 -1
  304. package/types/transformers.d.ts.map +1 -1
  305. package/types/utils/audio.d.ts +5 -2
  306. package/types/utils/audio.d.ts.map +1 -1
  307. package/types/utils/cache/CrossOriginStorageCache.d.ts +120 -0
  308. package/types/utils/cache/CrossOriginStorageCache.d.ts.map +1 -0
  309. package/types/utils/cache/FileCache.d.ts +39 -0
  310. package/types/utils/cache/FileCache.d.ts.map +1 -0
  311. package/types/utils/cache.d.ts +10 -4
  312. package/types/utils/cache.d.ts.map +1 -1
  313. package/types/utils/core.d.ts +59 -2
  314. package/types/utils/core.d.ts.map +1 -1
  315. package/types/utils/devices.d.ts +15 -0
  316. package/types/utils/devices.d.ts.map +1 -1
  317. package/types/utils/dtypes.d.ts +17 -1
  318. package/types/utils/dtypes.d.ts.map +1 -1
  319. package/types/utils/hub/{files.d.ts → FileResponse.d.ts} +1 -32
  320. package/types/utils/hub/FileResponse.d.ts.map +1 -0
  321. package/types/utils/hub/utils.d.ts +19 -3
  322. package/types/utils/hub/utils.d.ts.map +1 -1
  323. package/types/utils/hub.d.ts +36 -7
  324. package/types/utils/hub.d.ts.map +1 -1
  325. package/types/utils/image.d.ts +1 -1
  326. package/types/utils/logger.d.ts +28 -0
  327. package/types/utils/logger.d.ts.map +1 -0
  328. package/types/utils/lru_cache.d.ts +38 -0
  329. package/types/utils/lru_cache.d.ts.map +1 -0
  330. package/types/utils/memoize_promise.d.ts +14 -0
  331. package/types/utils/memoize_promise.d.ts.map +1 -0
  332. package/types/utils/model-loader.d.ts +15 -0
  333. package/types/utils/model-loader.d.ts.map +1 -1
  334. package/types/utils/model_registry/ModelRegistry.d.ts +298 -0
  335. package/types/utils/model_registry/ModelRegistry.d.ts.map +1 -0
  336. package/types/utils/model_registry/clear_cache.d.ts +74 -0
  337. package/types/utils/model_registry/clear_cache.d.ts.map +1 -0
  338. package/types/utils/model_registry/get_available_dtypes.d.ts +26 -0
  339. package/types/utils/model_registry/get_available_dtypes.d.ts.map +1 -0
  340. package/types/utils/model_registry/get_file_metadata.d.ts +20 -0
  341. package/types/utils/model_registry/get_file_metadata.d.ts.map +1 -0
  342. package/types/utils/model_registry/get_files.d.ts +23 -0
  343. package/types/utils/model_registry/get_files.d.ts.map +1 -0
  344. package/types/utils/model_registry/get_model_files.d.ts +48 -0
  345. package/types/utils/model_registry/get_model_files.d.ts.map +1 -0
  346. package/types/utils/model_registry/get_pipeline_files.d.ts +22 -0
  347. package/types/utils/model_registry/get_pipeline_files.d.ts.map +1 -0
  348. package/types/utils/model_registry/get_processor_files.d.ts +9 -0
  349. package/types/utils/model_registry/get_processor_files.d.ts.map +1 -0
  350. package/types/utils/model_registry/get_tokenizer_files.d.ts +9 -0
  351. package/types/utils/model_registry/get_tokenizer_files.d.ts.map +1 -0
  352. package/types/utils/model_registry/is_cached.d.ts +105 -0
  353. package/types/utils/model_registry/is_cached.d.ts.map +1 -0
  354. package/types/utils/model_registry/resolve_model_type.d.ts +24 -0
  355. package/types/utils/model_registry/resolve_model_type.d.ts.map +1 -0
  356. package/types/utils/random.d.ts +86 -0
  357. package/types/utils/random.d.ts.map +1 -0
  358. package/types/utils/tensor.d.ts.map +1 -1
  359. package/src/utils/data-structures.js +0 -572
  360. package/types/models/ast/modeling_ast.d.ts.map +0 -1
  361. package/types/utils/data-structures.d.ts +0 -294
  362. package/types/utils/data-structures.d.ts.map +0 -1
  363. package/types/utils/hub/files.d.ts.map +0 -1
  364. /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.0",
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": "./src/transformers.js",
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.5",
47
- "@huggingface/tokenizers": "^0.1.1",
48
- "onnxruntime-node": "1.24.1",
49
- "onnxruntime-web": "1.24.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": {
@@ -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 { isBlobURL, loadWasmBinary, loadWasmFactory, toAbsoluteURL } from './utils/cacheWasm.js';
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
- /** @type {Array<'verbose' | 'info' | 'warning' | 'error' | 'fatal'>} */
50
- const LOG_LEVELS = ['verbose', 'info', 'warning', 'error', 'fatal'];
51
- const DEFAULT_LOG_LEVEL = 4; // 'fatal';
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 and cache both the WASM binary and factory
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
- console.warn('Failed to pre-load WASM binary:', err);
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
- console.warn('Failed to pre-load WASM factory:', err);
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: DEFAULT_LOG_LEVEL,
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
- const output = await (IS_WEB_ENV ? (webInferenceChain = webInferenceChain.then(run)) : run());
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
- // Expose ONNX environment variables to `env.backends.onnx`
315
- env.backends.onnx = ONNX_ENV;
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 { isValidUrl } from '../../utils/hub/utils.js';
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/files.js').FileResponse|null|string>} The response object, or null if loading failed.
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
- console.warn(`Failed to load ${fileName} from cache:`, error);
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
- console.warn(`Failed to cache ${fileName}:`, e);
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
- console.warn('Failed to read WASM binary:', error);
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 of the WASM Factory, or null if loading failed.
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
- // Fix relative paths when loading factory from blob, overwrite import.meta.url with actual baseURL
77
- const baseUrl = libURL.split('/').slice(0, -1).join('/');
78
- code = code.replace(/import\.meta\.url/g, `"${baseUrl}"`);
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
- console.warn('Failed to read WASM binary:', error);
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
+ );