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