Module: Jekyll::EmbeddingsGenerator::Store

Extended by:
Jekyll::EmbeddingsGenerator
Defined in:
lib/jekyll/embeddings-generator/embeddings/store.rb

Constant Summary collapse

RECORD_SELECT =
"uid,most_recent_edit,embedding_fingerprint,embedding"

Constants included from Jekyll::EmbeddingsGenerator

VERSION

Class Method Summary collapse

Methods included from Jekyll::EmbeddingsGenerator

run

Class Method Details

.cache_hit?(existing_record, fingerprint) ⇒ Boolean

Returns:

  • (Boolean)


33
34
35
36
37
38
39
# File 'lib/jekyll/embeddings-generator/embeddings/store.rb', line 33

def cache_hit?(existing_record, fingerprint)
  return false if existing_record.nil?
  return false if existing_record["embedding_fingerprint"].nil?
  return false if existing_record["embedding"].nil?

  existing_record["embedding_fingerprint"] == fingerprint
end

.fetch_record(uid) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/jekyll/embeddings-generator/embeddings/store.rb', line 14

def fetch_record(uid)
  config = Jekyll::EmbeddingsGenerator.config
  response = HTTParty.get(
    "#{config["supabase_url"]}/rest/v1/#{config["db_table"]}",
    :headers => supabase_headers(config),
    :query   => {
      "uid"    => "eq.#{uid}",
      "select" => RECORD_SELECT,
    }
  )

  Jekyll.logger.debug "response headers: #{response.headers}"
  Jekyll.logger.debug "response body: #{response.body}"

  raise "Supabase API error: #{response.code} - #{response.body}" unless response.success?

  response.parsed_response&.first
end


60
61
62
63
64
65
66
67
# File 'lib/jekyll/embeddings-generator/embeddings/store.rb', line 60

def find_related(post)
  config = Jekyll::EmbeddingsGenerator.config
  post_uid = post.data[config["uid"]]
  embedding = query_embeddings(post_uid)
  return [] if embedding.nil? || embedding.empty?

  find_related_posts(embedding, post_uid)
end

.should_upsert?(data, existing_record) ⇒ Boolean

Returns:

  • (Boolean)


41
42
43
44
45
46
47
48
# File 'lib/jekyll/embeddings-generator/embeddings/store.rb', line 41

def should_upsert?(data, existing_record)
  return true if existing_record.nil?

  fingerprint_changed = data.embedding_fingerprint != existing_record["embedding_fingerprint"]
   = Time.parse(existing_record["most_recent_edit"].to_s) < data.most_recent_edit

  fingerprint_changed || 
end

.upsert_if_needed(data, existing_record = nil) ⇒ Object



50
51
52
53
54
55
56
57
58
# File 'lib/jekyll/embeddings-generator/embeddings/store.rb', line 50

def upsert_if_needed(data, existing_record = nil)
  existing_record ||= fetch_record(data.uid)
  should_update = should_upsert?(data, existing_record)

  Jekyll.logger.debug "Embeddings Generator:", "Should update? #{should_update ? "Yes" : "No"}"
  return false unless should_update

  update_embedding(data)
end