From a96b45e6aa214f817c9d1e955e40499a86f62707 Mon Sep 17 00:00:00 2001 From: kevinlam92 Date: Tue, 3 Mar 2026 22:46:32 -0800 Subject: [PATCH 1/4] [React Native] Fix float16 tensor crash by mapping to Uint16Array Hermes does not support Float16Array (ES2024). The React Native binding maps ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT16 to "Float16Array" which causes a crash when the JSI global lookup returns undefined. Change to "Uint16Array" to match the approach taken in the Node.js binding fix (#27327). --- js/react_native/cpp/TensorUtils.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/react_native/cpp/TensorUtils.cpp b/js/react_native/cpp/TensorUtils.cpp index 79d270d883294..658e98491e17b 100644 --- a/js/react_native/cpp/TensorUtils.cpp +++ b/js/react_native/cpp/TensorUtils.cpp @@ -54,7 +54,7 @@ static const std::unordered_map {ONNX_TENSOR_ELEMENT_DATA_TYPE_INT8, "Int8Array"}, {ONNX_TENSOR_ELEMENT_DATA_TYPE_UINT16, "Uint16Array"}, {ONNX_TENSOR_ELEMENT_DATA_TYPE_INT16, "Int16Array"}, - {ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT16, "Float16Array"}, + {ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT16, "Uint16Array"}, {ONNX_TENSOR_ELEMENT_DATA_TYPE_STRING, "Array"}, {ONNX_TENSOR_ELEMENT_DATA_TYPE_BOOL, "Uint8Array"}, }; From 768c80afbf49ad205c5c6552b5b6396bb2b7db91 Mon Sep 17 00:00:00 2001 From: kevinlam92 Date: Tue, 10 Mar 2026 00:44:33 -0700 Subject: [PATCH 2/4] Add float16 e2e test to BasicTypesTest --- .../app/src/main/assets/test_types_float16.ort | Bin 0 -> 1936 bytes js/react_native/e2e/src/BasicTypesTest.tsx | 13 +++++++++++++ js/react_native/e2e/src/test_types_float16.ort | Bin 0 -> 1936 bytes 3 files changed, 13 insertions(+) create mode 100644 js/react_native/e2e/android/app/src/main/assets/test_types_float16.ort create mode 100644 js/react_native/e2e/src/test_types_float16.ort diff --git a/js/react_native/e2e/android/app/src/main/assets/test_types_float16.ort b/js/react_native/e2e/android/app/src/main/assets/test_types_float16.ort new file mode 100644 index 0000000000000000000000000000000000000000..ec66bb420b978896125cf75ce1dce13d840055e5 GIT binary patch literal 1936 zcmZvcKWG$D5XRr>Y0juI=oN>AkRnKma75G;!9p>Dfv6##5Ug_CZIXp#_gF7~1VO7{ zVIfu)sl`G>M8q$C%Wv4AJi2geE=xm?QOM^-hQwi#J|I;8U=e6)mQDJ z={G%Os@J03(-|%TQX~&h%_Pm#!8XOj=cH(QZGO>CDi4n_Zwb0j>|-E1sb$PA`Xlya ztESdrU`%^__B=hbV`&bgrlgxQ_M5)AUUJqF%*pNKO*fI6fzS&s0r6_Kv*0*bIh5!P zbSJpt9@K|}_N0HHPxY|Px&^+1HK6lc8M}RT$*avb{V*7d!UezXMYxUl;;WXC5$&x) zTn7d45?lQ5{v_|A0{6Jpap$g~YZi+6@;kXt=@UTr(*tCGw|iTxm^r9pIZVFx4J*I@ z{N2`H%J>JZ|23DMju*upe0no$Jffe(Nk?+u(D@YNJ{D}g>Z|TDw(haO#M=0EIeLdq z-dNs;IB!^;z1%Rm}yc`Txkr{~t+Q=YQjPZsr*n1?p9@47bjq*>{0HV9$k?%*w5Mb5Hz(Y^djSelI@R zt~Y%H64@?a`UTSwf6e;x3rw#AUz#V|2ivivdE}6N-maRp{zJq0W@EmYyh-usT;g_j zufCHW_VU%IAH-?#Y{m%a0z3FW0nKd|3;^-0^Crb1kuCl(nl3l)HN&VjQ?53>Kzn+# z>A2IlYT;aY&aXw`-EgW|_Ldr6A3gAxw}(sy=xaYN1y8%o>T1a>#ZErW)^Fl cL;u*xc}@@`5uX#iyUQaZ!BkX@&#Sxn3rzST { } return data; } + case 'float16': { + const data = new Uint16Array(size); + for (let i = 0; i < size; i++) { + data[i] = i; + } + return data; + } case 'float64': { const data = new Float64Array(size); for (let i = 0; i < size; i++) { diff --git a/js/react_native/e2e/src/test_types_float16.ort b/js/react_native/e2e/src/test_types_float16.ort new file mode 100644 index 0000000000000000000000000000000000000000..ec66bb420b978896125cf75ce1dce13d840055e5 GIT binary patch literal 1936 zcmZvcKWG$D5XRr>Y0juI=oN>AkRnKma75G;!9p>Dfv6##5Ug_CZIXp#_gF7~1VO7{ zVIfu)sl`G>M8q$C%Wv4AJi2geE=xm?QOM^-hQwi#J|I;8U=e6)mQDJ z={G%Os@J03(-|%TQX~&h%_Pm#!8XOj=cH(QZGO>CDi4n_Zwb0j>|-E1sb$PA`Xlya ztESdrU`%^__B=hbV`&bgrlgxQ_M5)AUUJqF%*pNKO*fI6fzS&s0r6_Kv*0*bIh5!P zbSJpt9@K|}_N0HHPxY|Px&^+1HK6lc8M}RT$*avb{V*7d!UezXMYxUl;;WXC5$&x) zTn7d45?lQ5{v_|A0{6Jpap$g~YZi+6@;kXt=@UTr(*tCGw|iTxm^r9pIZVFx4J*I@ z{N2`H%J>JZ|23DMju*upe0no$Jffe(Nk?+u(D@YNJ{D}g>Z|TDw(haO#M=0EIeLdq z-dNs;IB!^;z1%Rm}yc`Txkr{~t+Q=YQjPZsr*n1?p9@47bjq*>{0HV9$k?%*w5Mb5Hz(Y^djSelI@R zt~Y%H64@?a`UTSwf6e;x3rw#AUz#V|2ivivdE}6N-maRp{zJq0W@EmYyh-usT;g_j zufCHW_VU%IAH-?#Y{m%a0z3FW0nKd|3;^-0^Crb1kuCl(nl3l)HN&VjQ?53>Kzn+# z>A2IlYT;aY&aXw`-EgW|_Ldr6A3gAxw}(sy=xaYN1y8%o>T1a>#ZErW)^Fl cL;u*xc}@@`5uX#iyUQaZ!BkX@&#Sxn3rzST Date: Tue, 10 Mar 2026 01:38:54 -0700 Subject: [PATCH 3/4] Add float16 model to iOS --- .../ios/OnnxruntimeModuleExample.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/js/react_native/e2e/ios/OnnxruntimeModuleExample.xcodeproj/project.pbxproj b/js/react_native/e2e/ios/OnnxruntimeModuleExample.xcodeproj/project.pbxproj index 70a5fcdd33cad..57e12e9bbdcef 100644 --- a/js/react_native/e2e/ios/OnnxruntimeModuleExample.xcodeproj/project.pbxproj +++ b/js/react_native/e2e/ios/OnnxruntimeModuleExample.xcodeproj/project.pbxproj @@ -15,6 +15,7 @@ 3ADD0A3E2EBB64D200761D6F /* ../src/test_types_int32.ort in Resources */ = {isa = PBXBuildFile; fileRef = 3ADD0A392EBB64D200761D6F /* ../src/test_types_int32.ort */; }; 3ADD0A3F2EBB64D200761D6F /* ../src/test_types_float.ort in Resources */ = {isa = PBXBuildFile; fileRef = 3ADD0A372EBB64D200761D6F /* ../src/test_types_float.ort */; }; 3ADD0A402EBB64D200761D6F /* ../src/test_types_uint8.ort in Resources */ = {isa = PBXBuildFile; fileRef = 3ADD0A3B2EBB64D200761D6F /* ../src/test_types_uint8.ort */; }; + 3ADD0A462EBB64D200761D6F /* ../src/test_types_float16.ort in Resources */ = {isa = PBXBuildFile; fileRef = 3ADD0A452EBB64D200761D6F /* ../src/test_types_float16.ort */; }; 3ADD0A422EBB677300761D6F /* test_types_double.onnx in Resources */ = {isa = PBXBuildFile; fileRef = 3ADD0A412EBB677300761D6F /* test_types_double.onnx */; }; 3ADD0A442EBB679A00761D6F /* test_types_bool.onnx in Resources */ = {isa = PBXBuildFile; fileRef = 3ADD0A432EBB679A00761D6F /* test_types_bool.onnx */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; @@ -62,6 +63,7 @@ 3ADD0A392EBB64D200761D6F /* ../src/test_types_int32.ort */ = {isa = PBXFileReference; lastKnownFileType = file; path = ../src/test_types_int32.ort; sourceTree = ""; }; 3ADD0A3A2EBB64D200761D6F /* ../src/test_types_int64.ort */ = {isa = PBXFileReference; lastKnownFileType = file; path = ../src/test_types_int64.ort; sourceTree = ""; }; 3ADD0A3B2EBB64D200761D6F /* ../src/test_types_uint8.ort */ = {isa = PBXFileReference; lastKnownFileType = file; path = ../src/test_types_uint8.ort; sourceTree = ""; }; + 3ADD0A452EBB64D200761D6F /* ../src/test_types_float16.ort */ = {isa = PBXFileReference; lastKnownFileType = file; path = ../src/test_types_float16.ort; sourceTree = ""; }; 3ADD0A412EBB677300761D6F /* test_types_double.onnx */ = {isa = PBXFileReference; lastKnownFileType = file; path = ../src/test_types_double.onnx; sourceTree = ""; }; 3ADD0A432EBB679A00761D6F /* test_types_bool.onnx */ = {isa = PBXFileReference; lastKnownFileType = file; path = ../src/test_types_bool.onnx; sourceTree = ""; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = OnnxruntimeModuleExample/LaunchScreen.storyboard; sourceTree = ""; }; @@ -149,6 +151,7 @@ 3ADD0A392EBB64D200761D6F /* ../src/test_types_int32.ort */, 3ADD0A3A2EBB64D200761D6F /* ../src/test_types_int64.ort */, 3ADD0A3B2EBB64D200761D6F /* ../src/test_types_uint8.ort */, + 3ADD0A452EBB64D200761D6F /* ../src/test_types_float16.ort */, DBA8BA86267293C4008CC55A /* mnist.ort */, DBBF7413263B8CCB00487C77 /* 3.jpg */, 13B07FAE1A68108700A75B9A /* OnnxruntimeModuleExample */, @@ -275,6 +278,7 @@ 3ADD0A3E2EBB64D200761D6F /* ../src/test_types_int32.ort in Resources */, 3ADD0A3F2EBB64D200761D6F /* ../src/test_types_float.ort in Resources */, 3ADD0A402EBB64D200761D6F /* ../src/test_types_uint8.ort in Resources */, + 3ADD0A462EBB64D200761D6F /* ../src/test_types_float16.ort in Resources */, E329E1162D3728940016B599 /* PrivacyInfo.xcprivacy in Resources */, 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, ); From 087c97c351b8035b50256c239bf57fb21dfa8e13 Mon Sep 17 00:00:00 2001 From: kevinlam92 Date: Tue, 10 Mar 2026 02:42:58 -0700 Subject: [PATCH 4/4] Fix test model shape --- .../src/main/assets/test_types_float16.ort | Bin 1936 -> 1384 bytes .../e2e/src/test_types_float16.ort | Bin 1936 -> 1384 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/js/react_native/e2e/android/app/src/main/assets/test_types_float16.ort b/js/react_native/e2e/android/app/src/main/assets/test_types_float16.ort index ec66bb420b978896125cf75ce1dce13d840055e5..c691bc264d7ca3206732e0621e478b484f64c399 100644 GIT binary patch delta 555 zcmZXRu}Z^G6o$`@H%%!@Q>-WmrDCa0S_egfIQRrYp?j-A3ev%5aBBw#aZ0(xP4E#4 zPL8hP;3GIVbm-s%DDnT(TSR){W0moBI2s>_tMj``Pk;U0*=Y+6=x)-s&@*nwuE*ypv{9`SFU;1 WyHgkQ;;y=E)K4mNp_FIZ-qtVUR#?FR literal 1936 zcmZvcKWG$D5XRr>Y0juI=oN>AkRnKma75G;!9p>Dfv6##5Ug_CZIXp#_gF7~1VO7{ zVIfu)sl`G>M8q$C%Wv4AJi2geE=xm?QOM^-hQwi#J|I;8U=e6)mQDJ z={G%Os@J03(-|%TQX~&h%_Pm#!8XOj=cH(QZGO>CDi4n_Zwb0j>|-E1sb$PA`Xlya ztESdrU`%^__B=hbV`&bgrlgxQ_M5)AUUJqF%*pNKO*fI6fzS&s0r6_Kv*0*bIh5!P zbSJpt9@K|}_N0HHPxY|Px&^+1HK6lc8M}RT$*avb{V*7d!UezXMYxUl;;WXC5$&x) zTn7d45?lQ5{v_|A0{6Jpap$g~YZi+6@;kXt=@UTr(*tCGw|iTxm^r9pIZVFx4J*I@ z{N2`H%J>JZ|23DMju*upe0no$Jffe(Nk?+u(D@YNJ{D}g>Z|TDw(haO#M=0EIeLdq z-dNs;IB!^;z1%Rm}yc`Txkr{~t+Q=YQjPZsr*n1?p9@47bjq*>{0HV9$k?%*w5Mb5Hz(Y^djSelI@R zt~Y%H64@?a`UTSwf6e;x3rw#AUz#V|2ivivdE}6N-maRp{zJq0W@EmYyh-usT;g_j zufCHW_VU%IAH-?#Y{m%a0z3FW0nKd|3;^-0^Crb1kuCl(nl3l)HN&VjQ?53>Kzn+# z>A2IlYT;aY&aXw`-EgW|_Ldr6A3gAxw}(sy=xaYN1y8%o>T1a>#ZErW)^Fl cL;u*xc}@@`5uX#iyUQaZ!BkX@&#Sxn3rzST-WmrDCa0S_egfIQRrYp?j-A3ev%5aBBw#aZ0(xP4E#4 zPL8hP;3GIVbm-s%DDnT(TSR){W0moBI2s>_tMj``Pk;U0*=Y+6=x)-s&@*nwuE*ypv{9`SFU;1 WyHgkQ;;y=E)K4mNp_FIZ-qtVUR#?FR literal 1936 zcmZvcKWG$D5XRr>Y0juI=oN>AkRnKma75G;!9p>Dfv6##5Ug_CZIXp#_gF7~1VO7{ zVIfu)sl`G>M8q$C%Wv4AJi2geE=xm?QOM^-hQwi#J|I;8U=e6)mQDJ z={G%Os@J03(-|%TQX~&h%_Pm#!8XOj=cH(QZGO>CDi4n_Zwb0j>|-E1sb$PA`Xlya ztESdrU`%^__B=hbV`&bgrlgxQ_M5)AUUJqF%*pNKO*fI6fzS&s0r6_Kv*0*bIh5!P zbSJpt9@K|}_N0HHPxY|Px&^+1HK6lc8M}RT$*avb{V*7d!UezXMYxUl;;WXC5$&x) zTn7d45?lQ5{v_|A0{6Jpap$g~YZi+6@;kXt=@UTr(*tCGw|iTxm^r9pIZVFx4J*I@ z{N2`H%J>JZ|23DMju*upe0no$Jffe(Nk?+u(D@YNJ{D}g>Z|TDw(haO#M=0EIeLdq z-dNs;IB!^;z1%Rm}yc`Txkr{~t+Q=YQjPZsr*n1?p9@47bjq*>{0HV9$k?%*w5Mb5Hz(Y^djSelI@R zt~Y%H64@?a`UTSwf6e;x3rw#AUz#V|2ivivdE}6N-maRp{zJq0W@EmYyh-usT;g_j zufCHW_VU%IAH-?#Y{m%a0z3FW0nKd|3;^-0^Crb1kuCl(nl3l)HN&VjQ?53>Kzn+# z>A2IlYT;aY&aXw`-EgW|_Ldr6A3gAxw}(sy=xaYN1y8%o>T1a>#ZErW)^Fl cL;u*xc}@@`5uX#iyUQaZ!BkX@&#Sxn3rzST