From c7bca62df4984260a7de0352ad8eb223cb93bf4d Mon Sep 17 00:00:00 2001 From: Travis Shears Date: Thu, 12 Mar 2026 09:24:39 +0100 Subject: [PATCH] create text embeds on create and updsate --- src/snippets/infra/text_embed.clj | 13 ++++++++++--- src/snippets/use_cases/create.clj | 4 ++-- src/snippets/use_cases/edit.clj | 2 ++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/snippets/infra/text_embed.clj b/src/snippets/infra/text_embed.clj index 6be3143..17f8e40 100644 --- a/src/snippets/infra/text_embed.clj +++ b/src/snippets/infra/text_embed.clj @@ -54,11 +54,18 @@ "Save an embedding to Qdrant" [snippet embed] (let [api-key (:qdrant-api-key (config)) - id (db/slug-to-db-id (:slug snippet))] - (t/log! {:level :info :data {:slug (:slug snippet) :api-key api-key :id id}} "Saving embedding for snippet") - (http/put (str (:qdrant-host (config)) "/collections/snippets-dev/points") + id (db/slug-to-db-id (:slug snippet)) + host (str (:qdrant-host (config)) "/collections/snippets-dev/points")] + (t/log! {:level :info :data {:slug (:slug snippet) :id id :host host}} "Saving embedding for snippet") + (http/put host {:headers {"api-key" api-key} :content-type :json :form-params {:points [{:id id :vector embed :payload {:slug (:slug snippet)}}]} ;; :cookie-store false :as :json}))) + +(defn get-and-save-embed + "Get an embedding for a snippet and save it to Qdrant" + [snippet] + (let [embed (get-embed snippet)] + (save-embed snippet embed))) diff --git a/src/snippets/use_cases/create.clj b/src/snippets/use_cases/create.clj index 33a41ba..35d5ca9 100644 --- a/src/snippets/use_cases/create.clj +++ b/src/snippets/use_cases/create.clj @@ -1,11 +1,11 @@ (ns snippets.use-cases.create (:require [taoensso.telemere :as t] + [snippets.infra.text-embed :as embed] [snippets.infra.db :as db])) (defn create-snippet [{:keys [title slug markdown tags]}] (let [pub-date (java.util.Date.)] (t/log! {:level :info, :data {:title title :slug slug}} "Creating snippet") (db/create-snippets [{:title title :slug slug :markdown markdown :tags tags :pub-date pub-date}]) - ;; TODO: caculate text embed vector - )) + (embed/get-and-save-embed (db/get-snippet-by-slug slug)))) diff --git a/src/snippets/use_cases/edit.clj b/src/snippets/use_cases/edit.clj index 508f88c..838e026 100644 --- a/src/snippets/use_cases/edit.clj +++ b/src/snippets/use_cases/edit.clj @@ -1,6 +1,7 @@ (ns snippets.use-cases.edit (:require [taoensso.telemere :as t] + [snippets.infra.text-embed :as embed] [malli.core :as m] [snippets.infra.db :as db])) @@ -18,5 +19,6 @@ (do (t/log! {:level :info, :data {:patch patch :slug slug}} "Valid changes editing snippet") (db/update-snippet slug patch) + (embed/get-and-save-embed (db/get-snippet-by-slug slug)) {:success true}) {:success false :reason :invalid-patch}))