From b568711809f6a2f374828fb02036d9048dc7c141 Mon Sep 17 00:00:00 2001 From: Jorge Manrubia Date: Tue, 13 May 2025 13:01:47 +0200 Subject: [PATCH] Add cache for embed in queries --- app/models/card/searchable.rb | 4 ++-- app/models/concerns/searchable.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/models/card/searchable.rb b/app/models/card/searchable.rb index b2de0c1c8..cacf7fd6d 100644 --- a/app/models/card/searchable.rb +++ b/app/models/card/searchable.rb @@ -8,8 +8,8 @@ module Card::Searchable scope :mentioning, ->(query) do if query = sanitize_query_syntax(query) - cards = Card.search(query).select(:id).to_sql - comments = Comment.search(query).select(:id).to_sql + cards = Card.search_similar(query).select(:id).to_sql + comments = Comment.search_similar(query).select(:id).to_sql left_joins(:comments).where("cards.id in (#{cards}) or comments.id in (#{comments})").distinct else diff --git a/app/models/concerns/searchable.rb b/app/models/concerns/searchable.rb index 4ef62ecda..f35359f85 100644 --- a/app/models/concerns/searchable.rb +++ b/app/models/concerns/searchable.rb @@ -21,7 +21,7 @@ module Searchable scope :search, ->(query) { joins("join #{using} idx on #{table_name}.id = idx.rowid").where("idx.#{as} match ?", query) } scope :search_similar, ->(query) do - query_embedding = RubyLLM.embed(query) + query_embedding = Rails.cache.fetch("llm:#{query}") { RubyLLM.embed(query) } joins(:search_embedding) .where("embedding MATCH ? AND k = ?", query_embedding.vectors.to_json, 20) .order(:distance)