diff --git a/app/models/ai_summary.rb b/app/models/ai_summary.rb index 6a880a5f2..30b23351b 100644 --- a/app/models/ai_summary.rb +++ b/app/models/ai_summary.rb @@ -9,15 +9,23 @@ class AiSummary < ActiveRecord::Base def self.store!(strategy, llm_model, summary, og_content, human:) content_ids = og_content.map { |c| c[:id] } - AiSummary.create!( - target: strategy.target, - algorithm: llm_model.name, - content_range: (content_ids.first..content_ids.last), - summarized_text: summary, - original_content_sha: build_sha(content_ids.join), - summary_type: strategy.type, - origin: !!human ? origins[:human] : origins[:system], - ) + AiSummary + .upsert( + { + target_id: strategy.target.id, + target_type: strategy.target.class.name, + algorithm: llm_model.name, + content_range: (content_ids.first..content_ids.last), + summarized_text: summary, + original_content_sha: build_sha(content_ids.join), + summary_type: strategy.type, + origin: !!human ? origins[:human] : origins[:system], + }, + unique_by: %i[target_id target_type summary_type], + update_only: %i[summarized_text original_content_sha algorithm origin content_range], + ) + .first + .then { AiSummary.find_by(id: _1["id"]) } end def self.build_sha(joined_ids) diff --git a/lib/summarization/fold_content.rb b/lib/summarization/fold_content.rb index 6f3344475..32bf97791 100644 --- a/lib/summarization/fold_content.rb +++ b/lib/summarization/fold_content.rb @@ -69,7 +69,7 @@ def delete_cached_summaries! end def force_summarize(user, &on_partial_blk) - delete_cached_summaries! + @persist_summaries = true summarize(user, &on_partial_blk) end