1
0
Tienson Qin 3 сар өмнө
parent
commit
4b0cb79d0d

+ 1 - 0
deps/db/src/logseq/db/common/initial_data.cljs

@@ -348,6 +348,7 @@
                         :logseq.kv/graph-uuid
                         :logseq.kv/latest-code-lang
                         :logseq.kv/graph-backup-folder
+                        :logseq.kv/graph-text-embedding-model-name
                         :logseq.property/empty-placeholder])
         favorites (when db-graph? (get-favorites db))
         views (when db-graph? (get-views-data db))

+ 1 - 1
package.json

@@ -125,7 +125,7 @@
         "@excalidraw/excalidraw": "0.16.1",
         "@glidejs/glide": "^3.6.0",
         "@highlightjs/cdn-assets": "10.4.1",
-        "@huggingface/transformers": "^3.4.0",
+        "@huggingface/transformers": "^3.6.3",
         "@ionic/core": "^8.5.4",
         "@ionic/react": "^8.5.4",
         "@isomorphic-git/lightning-fs": "^4.6.0",

+ 9 - 9
src/main/frontend/components/vector_search/sidebar.cljs

@@ -1,10 +1,10 @@
 (ns frontend.components.vector-search.sidebar
-  (:require [fipp.edn :as fipp]
+  (:require [clojure.string :as string]
+            [fipp.edn :as fipp]
             [frontend.common.missionary :as c.m]
             [frontend.handler.db-based.vector-search-flows :as vector-search-flows]
             [frontend.state :as state]
             [frontend.util :as util]
-            [logseq.db :as ldb]
             [logseq.shui.hooks :as hooks]
             [logseq.shui.ui :as shui]
             [missionary.core :as m]
@@ -54,13 +54,13 @@
      [])
     (hooks/use-effect!
      (fn []
-       (c.m/run-task
-         :update-search-result
-         (m/sp
-           (-> (c.m/<? (state/<invoke-db-worker :thread-api/vec-search-search repo query-string 10))
-               ldb/read-transit-str
-               set-result))
-         :succ (constantly nil)))
+       (when-not (string/blank? query-string)
+         (c.m/run-task
+           :update-search-result
+           (m/sp
+             (-> (c.m/<? (state/<invoke-db-worker :thread-api/vec-search-search repo query-string 10))
+                 set-result))
+           :succ (constantly nil))))
      [(hooks/use-debounced-value query-string 200)])
     [:div
      [:b "State"]

+ 6 - 5
src/main/frontend/handler/db_based/vector_search_background_tasks.cljs

@@ -4,7 +4,8 @@
             [frontend.config :as config]
             [frontend.flows :as flows]
             [frontend.state :as state]
-            [missionary.core :as m]))
+            [missionary.core :as m]
+            [promesa.core :as p]))
 
 (defn- run-background-task-when-not-publishing
   [key' task]
@@ -14,7 +15,7 @@
 (run-background-task-when-not-publishing
  ::init-load-model-when-switch-graph
  (m/reduce
-  (constantly nil)
-  (m/ap
-    (m/?> flows/current-repo-flow)
-    (c.m/<? (state/<invoke-db-worker :thread-api/vec-search-init-embedding-model (state/get-current-repo))))))
+  (fn [_ repo]
+    (when repo
+      (state/<invoke-db-worker :thread-api/vec-search-init-embedding-model repo)))
+  flows/current-repo-flow))

+ 2 - 2
src/main/frontend/inference_worker/inference_worker.cljs

@@ -17,8 +17,8 @@
 
   Object
   (init
-   [_this]
-   (infer-worker.text-embedding/<init))
+   [_this model-name]
+   (infer-worker.text-embedding/<init model-name))
 
   (load-model
    [_this model-name]

+ 21 - 16
src/main/frontend/inference_worker/text_embedding.cljs

@@ -93,6 +93,7 @@
 (defn task--text-embedding&store!
   "return labels(js-array)"
   [repo text-array delete-labels replace-deleted?]
+  (prn :debug :text-array text-array)
   (m/sp
     (when (model-loaded?)
       (let [hnsw (or (get-hnsw-index repo) (new-hnsw-index! repo))
@@ -173,29 +174,33 @@
                               :hnsw-config {:dims 384}}
    "Xenova/jina-embeddings-v2-base-zh" {:tf-config {:dtype "fp32"}
                                         :hnsw-config {:dims 768}}
-   "onnx-community/Qwen3-Embedding-0.6B-ONNX" {:tf-config {:dtype "fp32"}
-                                               :hnsw-config {:dims 384}}})
+   "onnx-community/Qwen3-Embedding-0.6B-ONNX" {:tf-config {:dtype "fp16"}
+                                               :hnsw-config {:dims 1024}}})
 
 (def ^:private *load-model-progress (atom nil))
 
 (defn <load-model
   [model-name]
-  (when-let [config (get available-embedding-models model-name)]
-    (p/let [extractor (pipeline "feature-extraction" model-name
-                                (clj->js (-> (:tf-config config)
-                                             (assoc "device" "webgpu")
-                                             (assoc "progress_callback" #(reset! *load-model-progress %)))))]
-      (reset! infer-worker.state/*extractor extractor)
-      (reset! infer-worker.state/*model-name+config [model-name config])
-      true)))
+  (if (= model-name (first @infer-worker.state/*model-name+config))
+    true
+    (when-let [config (get available-embedding-models model-name)]
+      (p/let [extractor (pipeline "feature-extraction" model-name
+                                  (clj->js
+                                   (-> (:tf-config config)
+                                       (assoc "device" "webgpu")
+                                       (assoc "progress_callback" #(reset! *load-model-progress %)))))]
+        (reset! infer-worker.state/*extractor extractor)
+        (reset! infer-worker.state/*model-name+config [model-name config])
+        true))))
 
 (defn <init
-  []
-  (p/do!
-   (p/let [hnswlib (loadHnswlib)]
-     (reset! infer-worker.state/*hnswlib hnswlib)
-     (.setDebugLogs (.-EmscriptenFileSystemManager ^js @infer-worker.state/*hnswlib) true)
-     (log/info :loaded :hnswlib))))
+  [model-name]
+  (p/let [hnswlib (loadHnswlib)]
+    (reset! infer-worker.state/*hnswlib hnswlib)
+    (.setDebugLogs (.-EmscriptenFileSystemManager ^js @infer-worker.state/*hnswlib) true)
+    (log/info :loaded :hnswlib)
+    (when model-name
+      (<load-model model-name))))
 
 (when-not common-config/PUBLISHING
   (c.m/run-background-task

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

@@ -8,6 +8,7 @@
             [frontend.common.thread-api :as thread-api]
             [frontend.config :as config]
             [frontend.date :as date]
+            [frontend.db :as db]
             [frontend.db.transact :as db-transact]
             [frontend.handler.notification :as notification]
             [frontend.handler.worker :as worker-handler]
@@ -143,7 +144,9 @@
       (worker-handler/handle-message! worker wrapped-worker)
       (reset! state/*infer-worker wrapped-worker)
       (p/do!
-       (.init wrapped-worker)
+       (let [embedding-model-name (ldb/get-key-value (db/get-db) :logseq.kv/graph-text-embedding-model-name)]
+         (prn :debug :embedding-model-name embedding-model-name)
+         (.init wrapped-worker embedding-model-name))
        (log/info "init infer-worker spent:" (str  (- (util/time-ms) t1) "ms"))))))
 
 (defn <connect-db-worker-and-infer-worker!

+ 9 - 9
yarn.lock

@@ -422,17 +422,17 @@
   resolved "https://registry.yarnpkg.com/@highlightjs/cdn-assets/-/cdn-assets-10.4.1.tgz#261bc7a391cd22e86e19ba809a9b997ca37f1514"
   integrity sha512-dJ6ZNFZ0TIatflV7h+5S6swUrc+hfivRgylKCcUk4+sb2Gi7uj5rSSv3x0p/fwIpyYlrKhxA2LqtdVBZ1Evk5Q==
 
-"@huggingface/jinja@^0.4.1":
-  version "0.4.1"
-  resolved "https://registry.yarnpkg.com/@huggingface/jinja/-/jinja-0.4.1.tgz#a71deab443c4badb6498d28e784ea1cd5eb369e2"
-  integrity sha512-3WXbMFaPkk03LRCM0z0sylmn8ddDm4ubjU7X+Hg4M2GOuMklwoGAFXp9V2keq7vltoB/c7McE5aHUVVddAewsw==
+"@huggingface/jinja@^0.5.1":
+  version "0.5.1"
+  resolved "https://registry.yarnpkg.com/@huggingface/jinja/-/jinja-0.5.1.tgz#081d334ddcf6237f65561ae3d665bb713a8ff74f"
+  integrity sha512-yUZLld4lrM9iFxHCwFQ7D1HW2MWMwSbeB7WzWqFYDWK+rEb+WldkLdAJxUPOmgICMHZLzZGVcVjFh3w/YGubng==
 
-"@huggingface/transformers@^3.4.0":
-  version "3.6.2"
-  resolved "https://registry.yarnpkg.com/@huggingface/transformers/-/transformers-3.6.2.tgz#da6af9e2cb77d319210ee329924412edf2e98654"
-  integrity sha512-k4ShV5DcvXu5csmU6OV4uEHMvXplmAq5e4mef+iWujtL4kllZx6kU0ROEZi0bpWeP3Pud3JyPQEx+dU4QDDClQ==
+"@huggingface/transformers@^3.6.3":
+  version "3.6.3"
+  resolved "https://registry.yarnpkg.com/@huggingface/transformers/-/transformers-3.6.3.tgz#1f843a92c8427d25a7af5384c28468d43fcff70a"
+  integrity sha512-trcoB3jEzYNkhmDnJwsiXI1vsjKhGKq+11RgYQJwqOs/XUqJfL/5KiFf2FKwfdTZTCMrgKTBF8U5Dk0fh1YVtg==
   dependencies:
-    "@huggingface/jinja" "^0.4.1"
+    "@huggingface/jinja" "^0.5.1"
     onnxruntime-node "1.21.0"
     onnxruntime-web "1.22.0-dev.20250409-89f8206ba4"
     sharp "^0.34.1"