This is an automated email from the ASF dual-hosted git repository.

tqchen pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm.git


The following commit(s) were added to refs/heads/main by this push:
     new 26db8bfd7e [Web] Fix arrayDecodeStorage scope issue for q0f32 models 
(#18415)
26db8bfd7e is described below

commit 26db8bfd7e527198f43f3cc379f404c7513a82ef
Author: Akaash Parthasarathy <[email protected]>
AuthorDate: Mon Nov 10 15:14:01 2025 -0500

    [Web] Fix arrayDecodeStorage scope issue for q0f32 models (#18415)
---
 web/emcc/tvmjs_support.cc |   1 +
 web/emcc/wasm_runtime.cc  |  20 +++++++-
 web/package-lock.json     | 122 +++++++++++++++++++++++-----------------------
 web/src/rpc_server.ts     |   2 +-
 web/src/runtime.ts        |   1 -
 web/src/webgpu.ts         |   4 +-
 6 files changed, 83 insertions(+), 67 deletions(-)

diff --git a/web/emcc/tvmjs_support.cc b/web/emcc/tvmjs_support.cc
index 467fbbd4ab..d6b94bda32 100644
--- a/web/emcc/tvmjs_support.cc
+++ b/web/emcc/tvmjs_support.cc
@@ -31,6 +31,7 @@
 #define TVM_FFI_ALWAYS_LOG_BEFORE_THROW 1
 #define DMLC_USE_LOGGING_LIBRARY <tvm/runtime/logging.h>
 
+#include <tvm/ffi/extra/module.h>
 #include <tvm/ffi/function.h>
 #include <tvm/ffi/reflection/registry.h>
 #include <tvm/runtime/device_api.h>
diff --git a/web/emcc/wasm_runtime.cc b/web/emcc/wasm_runtime.cc
index d787c295e0..c5541392d9 100644
--- a/web/emcc/wasm_runtime.cc
+++ b/web/emcc/wasm_runtime.cc
@@ -30,6 +30,7 @@
 #define TVM_FFI_ALWAYS_LOG_BEFORE_THROW 1
 #define DMLC_USE_LOGGING_LIBRARY <tvm/runtime/logging.h>
 
+#include <tvm/ffi/any.h>
 #include <tvm/ffi/reflection/registry.h>
 #include <tvm/runtime/logging.h>
 
@@ -52,6 +53,8 @@
 #include "3rdparty/tvm-ffi/src/ffi/container.cc"
 #include "3rdparty/tvm-ffi/src/ffi/dtype.cc"
 #include "3rdparty/tvm-ffi/src/ffi/error.cc"
+#include "3rdparty/tvm-ffi/src/ffi/extra/env_c_api.cc"
+#include "3rdparty/tvm-ffi/src/ffi/extra/env_context.cc"
 #include "3rdparty/tvm-ffi/src/ffi/extra/library_module.cc"
 #include "3rdparty/tvm-ffi/src/ffi/extra/library_module_system_lib.cc"
 #include "3rdparty/tvm-ffi/src/ffi/extra/module.cc"
@@ -145,7 +148,20 @@ void ArrayDecodeStorage(Tensor cpu_arr, std::string bytes, 
std::string format, s
 
 TVM_FFI_STATIC_INIT_BLOCK() {
   namespace refl = tvm::ffi::reflection;
-  refl::GlobalDef().def("tvmjs.array.decode_storage", ArrayDecodeStorage);
+  refl::GlobalDef().def_packed(
+      "tvmjs.array.decode_storage", [](ffi::PackedArgs args, ffi::Any* ret) {
+        Tensor cpu_arr = args[0].cast<Tensor>();
+        auto bytes = args[1].cast<ffi::Bytes>();
+        std::string format = args[2].cast<ffi::String>().operator 
std::string();
+        std::string dtype = args[3].cast<ffi::String>().operator std::string();
+        ArrayDecodeStorage(cpu_arr, bytes, format, dtype);
+        if (ret != nullptr) {
+          auto* ret_data = reinterpret_cast<TVMFFIAny*>(ret);
+          ret_data->type_index = TVMFFITypeIndex::kTVMFFINone;
+          ret_data->zero_padding = 0;
+          ret_data->v_int64 = 0;
+        }
+      });
 }
 
 // Concatenate n TVMArrays
@@ -217,7 +233,7 @@ TVM_FFI_STATIC_INIT_BLOCK() {
       .def("tvmjs.runtime.TensorCopyFromBytes",
            [](Tensor nd, TVMFFIByteArray* bytes) { 
nd.CopyFromBytes(bytes->data, bytes->size); })
       .def("tvmjs.runtime.TensorCopyToBytes", [](Tensor nd) -> ffi::Bytes {
-        size_t size = GetDataSize(*(nd.operator->()));
+        size_t size = ffi::GetDataSize(*(nd.operator->()));
         std::string bytes;
         bytes.resize(size);
         nd.CopyToBytes(bytes.data(), size);
diff --git a/web/package-lock.json b/web/package-lock.json
index 0dd9b49201..50a4ca2831 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -45,29 +45,29 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.28.4",
-      "resolved": 
"https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz";,
-      "integrity": 
"sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==",
+      "version": "7.28.5",
+      "resolved": 
"https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz";,
+      "integrity": 
"sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.28.4",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz";,
-      "integrity": 
"sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==",
+      "version": "7.28.5",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz";,
+      "integrity": 
"sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
       "dev": true,
       "dependencies": {
         "@babel/code-frame": "^7.27.1",
-        "@babel/generator": "^7.28.3",
+        "@babel/generator": "^7.28.5",
         "@babel/helper-compilation-targets": "^7.27.2",
         "@babel/helper-module-transforms": "^7.28.3",
         "@babel/helpers": "^7.28.4",
-        "@babel/parser": "^7.28.4",
+        "@babel/parser": "^7.28.5",
         "@babel/template": "^7.27.2",
-        "@babel/traverse": "^7.28.4",
-        "@babel/types": "^7.28.4",
+        "@babel/traverse": "^7.28.5",
+        "@babel/types": "^7.28.5",
         "@jridgewell/remapping": "^2.3.5",
         "convert-source-map": "^2.0.0",
         "debug": "^4.1.0",
@@ -99,13 +99,13 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.28.3",
-      "resolved": 
"https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz";,
-      "integrity": 
"sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==",
+      "version": "7.28.5",
+      "resolved": 
"https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz";,
+      "integrity": 
"sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==",
       "dev": true,
       "dependencies": {
-        "@babel/parser": "^7.28.3",
-        "@babel/types": "^7.28.2",
+        "@babel/parser": "^7.28.5",
+        "@babel/types": "^7.28.5",
         "@jridgewell/gen-mapping": "^0.3.12",
         "@jridgewell/trace-mapping": "^0.3.28",
         "jsesc": "^3.0.2"
@@ -197,9 +197,9 @@
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.27.1",
-      "resolved": 
"https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz";,
-      "integrity": 
"sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
+      "version": "7.28.5",
+      "resolved": 
"https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz";,
+      "integrity": 
"sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
@@ -228,12 +228,12 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.28.4",
-      "resolved": 
"https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz";,
-      "integrity": 
"sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==",
+      "version": "7.28.5",
+      "resolved": 
"https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz";,
+      "integrity": 
"sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.28.4"
+        "@babel/types": "^7.28.5"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -449,17 +449,17 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.28.4",
-      "resolved": 
"https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz";,
-      "integrity": 
"sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==",
+      "version": "7.28.5",
+      "resolved": 
"https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz";,
+      "integrity": 
"sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==",
       "dev": true,
       "dependencies": {
         "@babel/code-frame": "^7.27.1",
-        "@babel/generator": "^7.28.3",
+        "@babel/generator": "^7.28.5",
         "@babel/helper-globals": "^7.28.0",
-        "@babel/parser": "^7.28.4",
+        "@babel/parser": "^7.28.5",
         "@babel/template": "^7.27.2",
-        "@babel/types": "^7.28.4",
+        "@babel/types": "^7.28.5",
         "debug": "^4.3.1"
       },
       "engines": {
@@ -467,13 +467,13 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.28.4",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz";,
-      "integrity": 
"sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==",
+      "version": "7.28.5",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz";,
+      "integrity": 
"sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
       "dev": true,
       "dependencies": {
         "@babel/helper-string-parser": "^7.27.1",
-        "@babel/helper-validator-identifier": "^7.27.1"
+        "@babel/helper-validator-identifier": "^7.28.5"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -520,9 +520,9 @@
       }
     },
     "node_modules/@eslint-community/regexpp": {
-      "version": "4.12.1",
-      "resolved": 
"https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz";,
-      "integrity": 
"sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+      "version": "4.12.2",
+      "resolved": 
"https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz";,
+      "integrity": 
"sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
       "dev": true,
       "engines": {
         "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
@@ -1188,9 +1188,9 @@
       "dev": true
     },
     "node_modules/@types/node": {
-      "version": "20.19.23",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.23.tgz";,
-      "integrity": 
"sha512-yIdlVVVHXpmqRhtyovZAcSy0MiPcYWGkoO4CGe/+jpP0hmNuihm4XhHbADpK++MsiLHP5MVlv+bcgdF99kSiFQ==",
+      "version": "20.19.24",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.24.tgz";,
+      "integrity": 
"sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==",
       "dev": true,
       "dependencies": {
         "undici-types": "~6.21.0"
@@ -1844,9 +1844,9 @@
       }
     },
     "node_modules/baseline-browser-mapping": {
-      "version": "2.8.19",
-      "resolved": 
"https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.19.tgz";,
-      "integrity": 
"sha512-zoKGUdu6vb2jd3YOq0nnhEDQVbPcHhco3UImJrv5dSkvxTc2pl2WjOPsjZXDwPDSl5eghIMuY3R6J9NDKF3KcQ==",
+      "version": "2.8.25",
+      "resolved": 
"https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.25.tgz";,
+      "integrity": 
"sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==",
       "dev": true,
       "bin": {
         "baseline-browser-mapping": "dist/cli.js"
@@ -1881,9 +1881,9 @@
       "dev": true
     },
     "node_modules/browserslist": {
-      "version": "4.26.3",
-      "resolved": 
"https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz";,
-      "integrity": 
"sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==",
+      "version": "4.27.0",
+      "resolved": 
"https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz";,
+      "integrity": 
"sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==",
       "dev": true,
       "funding": [
         {
@@ -1900,11 +1900,11 @@
         }
       ],
       "dependencies": {
-        "baseline-browser-mapping": "^2.8.9",
-        "caniuse-lite": "^1.0.30001746",
-        "electron-to-chromium": "^1.5.227",
-        "node-releases": "^2.0.21",
-        "update-browserslist-db": "^1.1.3"
+        "baseline-browser-mapping": "^2.8.19",
+        "caniuse-lite": "^1.0.30001751",
+        "electron-to-chromium": "^1.5.238",
+        "node-releases": "^2.0.26",
+        "update-browserslist-db": "^1.1.4"
       },
       "bin": {
         "browserslist": "cli.js"
@@ -1992,9 +1992,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001751",
-      "resolved": 
"https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz";,
-      "integrity": 
"sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==",
+      "version": "1.0.30001754",
+      "resolved": 
"https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001754.tgz";,
+      "integrity": 
"sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==",
       "dev": true,
       "funding": [
         {
@@ -2415,9 +2415,9 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.238",
-      "resolved": 
"https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.238.tgz";,
-      "integrity": 
"sha512-khBdc+w/Gv+cS8e/Pbnaw/FXcBUeKrRVik9IxfXtgREOWyJhR4tj43n3amkVogJ/yeQUqzkrZcFhtIxIdqmmcQ==",
+      "version": "1.5.249",
+      "resolved": 
"https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.249.tgz";,
+      "integrity": 
"sha512-5vcfL3BBe++qZ5kuFhD/p8WOM1N9m3nwvJPULJx+4xf2usSlZFJ0qoNYO2fOX4hi3ocuDcmDobtA+5SFr4OmBg==",
       "dev": true
     },
     "node_modules/emittery": {
@@ -5005,9 +5005,9 @@
       }
     },
     "node_modules/node-releases": {
-      "version": "2.0.26",
-      "resolved": 
"https://registry.npmjs.org/node-releases/-/node-releases-2.0.26.tgz";,
-      "integrity": 
"sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==",
+      "version": "2.0.27",
+      "resolved": 
"https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz";,
+      "integrity": 
"sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
       "dev": true
     },
     "node_modules/normalize-package-data": {
@@ -7094,9 +7094,9 @@
       }
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.1.3",
-      "resolved": 
"https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz";,
-      "integrity": 
"sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+      "version": "1.1.4",
+      "resolved": 
"https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz";,
+      "integrity": 
"sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==",
       "dev": true,
       "funding": [
         {
diff --git a/web/src/rpc_server.ts b/web/src/rpc_server.ts
index b43d5706d7..3adab93be1 100644
--- a/web/src/rpc_server.ts
+++ b/web/src/rpc_server.ts
@@ -262,7 +262,7 @@ export class RPCServer {
     const asyncInitServer = async (): Promise<void> => {
       assert(args[1] instanceof Uint8Array);
       const inst = await runtime.instantiate(
-        args[1].buffer,
+        args[1].buffer as ArrayBuffer,
         this.getImports(),
         this.logger
       );
diff --git a/web/src/runtime.ts b/web/src/runtime.ts
index c8b822316f..8143f970ed 100644
--- a/web/src/runtime.ts
+++ b/web/src/runtime.ts
@@ -227,7 +227,6 @@ class RuntimeContext implements Disposable {
     this.tensorCacheGet.dispose();
     this.tensorCacheRemove.dispose();
     this.tensorCacheUpdate.dispose();
-    this.tensorCacheClear.dispose();
     this.arrayDecodeStorage.dispose();
     this.paramModuleFromCache.dispose();
     this.paramModuleFromCacheByName.dispose();
diff --git a/web/src/webgpu.ts b/web/src/webgpu.ts
index 27d68d887c..3c905f3800 100644
--- a/web/src/webgpu.ts
+++ b/web/src/webgpu.ts
@@ -476,7 +476,7 @@ export class WebGPUContext {
     this.device.queue.writeBuffer(
       this.gpuBufferFromPtr(toPtr),
       toOffset,
-      rawBytes,
+      rawBytes as GPUAllowSharedBufferSource,
       0,
       nbytes
     );
@@ -861,7 +861,7 @@ export class WebGPUContext {
     this.device.queue.writeBuffer(
       this.gpuBufferFromPtr(to),
       toOffset,
-      rawBytes,
+      rawBytes as GPUAllowSharedBufferSource,
       0,
       nbytes
     );

Reply via email to