Skip to content
This repository was archived by the owner on Jul 22, 2025. It is now read-only.

Commit 96b4117

Browse files
committed
is this it?
1 parent 79d13ad commit 96b4117

File tree

1 file changed

+19
-24
lines changed

1 file changed

+19
-24
lines changed

lib/embeddings/schema.rb

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,9 @@ def find_by_target(target)
134134
end
135135

136136
def asymmetric_similarity_search(embedding, limit:, offset:)
137-
before_query, after_query = hnsw_search_workaround(limit)
137+
before_query = hnsw_search_workaround(limit)
138+
138139
builder = DB.build(<<~SQL)
139-
#{before_query}
140140
WITH candidates AS (
141141
SELECT
142142
#{target_column},
@@ -158,7 +158,6 @@ def asymmetric_similarity_search(embedding, limit:, offset:)
158158
embeddings::halfvec(#{dimensions}) #{pg_function} '[:query_embedding]'::halfvec(#{dimensions})
159159
LIMIT :limit
160160
OFFSET :offset;
161-
#{after_query}
162161
SQL
163162

164163
builder.where(
@@ -176,22 +175,25 @@ def asymmetric_similarity_search(embedding, limit:, offset:)
176175
candidates_limit = limit * 2
177176
end
178177

179-
builder.query(
180-
query_embedding: embedding,
181-
candidates_limit: candidates_limit,
182-
limit: limit,
183-
offset: offset,
184-
)
178+
ActiveRecord::Base.transaction do
179+
DB.exec(before_query) unless before_query.blank?
180+
builder.query(
181+
query_embedding: embedding,
182+
candidates_limit: candidates_limit,
183+
limit: limit,
184+
offset: offset,
185+
)
186+
end
185187
rescue PG::Error => e
186188
Rails.logger.error("Error #{e} querying embeddings for model #{vector_def.display_name}")
187189
raise MissingEmbeddingError
188190
end
189191

190192
def symmetric_similarity_search(record)
191193
limit = 200
192-
before_query, after_query = hnsw_search_workaround(limit)
194+
before_query = hnsw_search_workaround(limit)
195+
193196
builder = DB.build(<<~SQL)
194-
#{before_query}
195197
WITH le_target AS (
196198
SELECT
197199
embeddings
@@ -229,14 +231,16 @@ def symmetric_similarity_search(record)
229231
LIMIT 1
230232
)
231233
LIMIT #{limit / 2};
232-
#{after_query}
233234
SQL
234235

235236
builder.where("model_id = :vid AND strategy_id = :vsid")
236237

237238
yield(builder) if block_given?
238239

239-
builder.query(vid: vector_def.id, vsid: vector_def.strategy_id, target_id: record.id)
240+
ActiveRecord::Base.transaction do
241+
DB.exec(before_query) unless before_query.blank?
242+
builder.query(vid: vector_def.id, vsid: vector_def.strategy_id, target_id: record.id)
243+
end
240244
rescue PG::Error => e
241245
Rails.logger.error("Error #{e} querying embeddings for model #{vector_def.display_name}")
242246
raise MissingEmbeddingError
@@ -271,17 +275,8 @@ def store(record, embedding, digest)
271275
def hnsw_search_workaround(limit)
272276
threshold = limit * 2
273277

274-
return "", "" if threshold < DEFAULT_HNSW_EF_SEARCH
275-
return "SET LOCAL hnsw.ef_search = #{threshold};", "" if Rails.env.test?
276-
277-
before_query = <<~SQL
278-
BEGIN;
279-
SET LOCAL hnsw.ef_search = #{threshold};
280-
SQL
281-
after_query = <<~SQL
282-
COMMIT;
283-
SQL
284-
[before_query, after_query]
278+
return "" if threshold < DEFAULT_HNSW_EF_SEARCH
279+
"SET LOCAL hnsw.ef_search = #{threshold};"
285280
end
286281

287282
delegate :dimensions, :pg_function, to: :vector_def

0 commit comments

Comments
 (0)