productionizing a bit.

This commit is contained in:
Bryce
2023-08-24 22:31:21 -07:00
parent ad98cd9896
commit 9c472dfc8e

View File

@@ -2,6 +2,7 @@
(:require (:require
[auto-ap.datomic :refer [audit-transact-batch conn]] [auto-ap.datomic :refer [audit-transact-batch conn]]
[auto-ap.jobs.core :refer [execute]] [auto-ap.jobs.core :refer [execute]]
[auto-ap.logging :as alog]
[cemerick.url :as url] [cemerick.url :as url]
[clj-http.client :as http2] [clj-http.client :as http2]
[datomic.api :as dc])) [datomic.api :as dc]))
@@ -11,7 +12,7 @@
dc/db dc/db
(dc/q '[:find ?t ?c (dc/q '[:find ?t ?c
:where :where
[(iol-ion.query/recent-date 90) ?start] [(iol-ion.query/recent-date 14) ?start]
[?t :transaction/date ?d] [?t :transaction/date ?d]
[(>= ?d ?start)] [(>= ?d ?start)]
[?t :transaction/approval-status :transaction-approval-status/unapproved] [?t :transaction/approval-status :transaction-approval-status/unapproved]
@@ -36,23 +37,26 @@
:values)) :values))
(defn get-pinecone-similarities [transaction-id] (defn get-pinecone-similarities [transaction-id]
(filter (if-let [vector (get-pinecone transaction-id)]
(fn [{:keys [score]}] (filter
(> score 0.95) (fn [{:keys [score]}]
) (> score 0.95))
(-> (->
(http2/post (-> "https://transactions-a8257ba.svc.us-west4-gcp-free.pinecone.io/query" (http2/post (-> "https://transactions-a8257ba.svc.us-west4-gcp-free.pinecone.io/query"
url/url url/url
str) str)
{:headers {"Api-Key" "f2d3a78e-bcea-4fcd-88b6-2527b8423607"} {:headers {"Api-Key" "f2d3a78e-bcea-4fcd-88b6-2527b8423607"}
:form-params {"vector" (get-pinecone transaction-id) :form-params {"vector" vector
"topK" 200, "topK" 200,
"includeMetadata" true "includeMetadata" true
"namespace" ""} "namespace" ""}
:content-type :json :content-type :json
:as :json}) :as :json})
:body :body
:matches))) :matches))
(do (alog/info ::no-matches-for :transaction transaction-id)
[])))
(defn pinecone-similarity-list [transaction-id] (defn pinecone-similarity-list [transaction-id]
(for [{{:keys [amount date description vendor]} :metadata score :score id :id} (get-pinecone-similarities transaction-id) (for [{{:keys [amount date description vendor]} :metadata score :score id :id} (get-pinecone-similarities transaction-id)
@@ -83,16 +87,18 @@
(conj (:count v)) (conj (:count v))
(conj (:seen-by-client? v)))))) (conj (:seen-by-client? v))))))
(catch Exception e (catch Exception e
(println e) (alog/warn ::similarities-failed :error e)
[]))) [])))
(defn get-outcome-recommendations [] (defn get-outcome-recommendations []
(for [[transaction client] (get-recent-transactions) (let [recent (get-recent-transactions)]
:let [similarity (pinecone-similarity-list transaction)] (alog/info ::recent-transactions-fetched :count (count recent) :sample (take 3 recent))
:when (seq similarity)] (for [[transaction client] recent
{:db/id transaction :let [similarity (pinecone-similarity-list transaction)]
:transaction/outcome-recommendation :when (seq similarity)]
(similar->recommendation similarity client)})) {:db/id transaction
:transaction/outcome-recommendation
(similar->recommendation similarity client)})))
(defn make-outcome-recommendations [] (defn make-outcome-recommendations []
(audit-transact-batch (get-outcome-recommendations) {:user/name "Outcome recommendations from pinecone"})) (audit-transact-batch (get-outcome-recommendations) {:user/name "Outcome recommendations from pinecone"}))