瀏覽代碼

fix: infer worker doesn't work

Tienson Qin 3 月之前
父節點
當前提交
f3e1da67c7

+ 1 - 1
package.json

@@ -80,7 +80,7 @@
         "cljs:mobile-watch": "clojure -M:cljs watch mobile",
         "cljs:release-mobile": "clojure -M:cljs release mobile",
         "cljs:dev-watch": "clojure -M:cljs watch app electron mobile",
-        "cljs:app-watch": "clojure -M:cljs watch app",
+        "cljs:app-watch": "clojure -M:cljs watch app workers",
         "cljs:electron-watch": "clojure -M:cljs watch app electron --config-merge \"{:asset-path \\\"./js\\\"}\"",
         "cljs:release": "clojure -M:cljs release app publishing electron",
         "cljs:release-electron": "clojure -M:cljs release app electron --debug && clojure -M:cljs release publishing",

+ 4 - 2
src/main/frontend/common/thread_api.cljc

@@ -29,8 +29,10 @@
      (let [qkw (keyword qualified-kw-str)]
        (vswap! *profile update qkw inc)
        (if-let [f (@*thread-apis qkw)]
-         (let [result (apply f (cond-> args-transit-str-or-args-array
-                                 (not direct-pass?) ldb/read-transit-str))
+         (let [result (if (= qkw :thread-api/set-infer-worker-proxy)
+                        (f args-transit-str-or-args-array)
+                        (apply f (cond-> args-transit-str-or-args-array
+                                   (not direct-pass?) ldb/read-transit-str)))
                result-promise
                (if (fn? result) ;; missionary task is a fn
                  (js/Promise. result)

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

@@ -93,8 +93,12 @@
                            (p/let [result (.remoteInvoke ^js wrapped-worker*
                                                          (str (namespace qkw) "/" (name qkw))
                                                          direct-pass?
-                                                         (if direct-pass?
-                                                           args
+                                                         (cond
+                                                           (= qkw :thread-api/set-infer-worker-proxy)
+                                                           (first args)
+                                                           direct-pass?
+                                                           (into-array args)
+                                                           :else
                                                            (ldb/write-transit-str args)))]
                              (if direct-pass?
                                result
@@ -144,8 +148,8 @@
 
 (defn <connect-db-worker-and-infer-worker!
   []
-  (state/<invoke-db-worker-direct-pass :thread-api/set-infer-worker-proxy
-                                       (Comlink/proxy @state/*infer-worker)))
+  (assert (and @state/*infer-worker @state/*db-worker))
+  (state/<invoke-db-worker-direct-pass :thread-api/set-infer-worker-proxy (Comlink/proxy @state/*infer-worker)))
 
 (defn <export-db!
   [repo data]

+ 9 - 6
src/main/frontend/worker/db_worker.cljs

@@ -377,8 +377,14 @@
   (reset! worker-state/*rtc-ws-url rtc-ws-url)
   (init-sqlite-module!))
 
+(def-thread-api :thread-api/set-infer-worker-proxy
+  [infer-worker-proxy]
+  (reset! worker-state/*infer-worker infer-worker-proxy)
+  nil)
+
 ;; [graph service]
 (defonce *service (atom []))
+
 (defonce fns {"remoteInvoke" thread-api/remote-function})
 
 (defn- start-db!
@@ -713,10 +719,6 @@
       (gc-sqlite-dbs! db client-ops conn {:full-gc? true})
       nil)))
 
-(def-thread-api :thread-api/set-infer-worker-proxy
-  [infer-worker-proxy]
-  (reset! worker-state/*infer-worker infer-worker-proxy))
-
 (def-thread-api :thread-api/vec-search-embedding-model-info
   [repo]
   (embedding/task--embedding-model-info repo))
@@ -855,8 +857,9 @@
                                     ;; wait for service ready
                                     (js-invoke (:proxy service) k args)))
 
-                                (or (contains? #{:thread-api/sync-app-state} method-k)
-                                    (nil? service))
+                                (or
+                                 (contains? #{:thread-api/set-infer-worker-proxy :thread-api/sync-app-state} method-k)
+                                 (nil? service))
                                 ;; only proceed down this branch before shared-service is initialized
                                 (apply f args)