Explorar el Código

enhance: use sharedworker for inference to reduce memory usage

Tienson Qin hace 6 meses
padre
commit
1e84a21042

+ 8 - 4
src/main/frontend/inference_worker/inference_worker.cljs

@@ -60,7 +60,11 @@
    (clj->js (infer-worker.text-embedding/index-info repo))))
 
 (defn init
-  []
-  (glogi-console/install!)
-  (let [^js obj #_{:clj-kondo/ignore [:unresolved-symbol]} (InferenceWorker.)]
-    (Comlink/expose obj)))
+  [])
+
+(.addEventListener js/self "connect"
+                   (fn [^js e]
+                     (glogi-console/install!)
+                     (let [port (first (.-ports e))
+                           ^js obj #_{:clj-kondo/ignore [:unresolved-symbol]} (InferenceWorker.)]
+                       (Comlink/expose obj port))))

+ 4 - 3
src/main/frontend/persist_db/browser.cljs

@@ -136,10 +136,11 @@
   []
   (when-not util/node-test?
     (let [worker-url "js/inference-worker.js"
-          worker (js/Worker. (str worker-url "?electron=" (util/electron?) "&publishing=" config/publishing?))
-          wrapped-worker (Comlink/wrap worker)
+          ^js worker (js/SharedWorker. (str worker-url "?electron=" (util/electron?) "&publishing=" config/publishing?))
+          ^js port (.-port worker)
+          wrapped-worker (Comlink/wrap port)
           t1 (util/time-ms)]
-      (worker-handler/handle-message! worker wrapped-worker)
+      (worker-handler/handle-message! port wrapped-worker)
       (reset! state/*infer-worker wrapped-worker)
       (p/do!
        (let [embedding-model-name (ldb/get-key-value (db/get-db) :logseq.kv/graph-text-embedding-model-name)]