DEV: Updates to the summarization strategy API (#301)

Introduced by discourse/discourse#24489

In the future, this change will let us log who requested the summary in the `AiApiAuditLog`.:
This commit is contained in:
Roman Rizzi 2023-11-21 13:27:35 -03:00 committed by GitHub
parent 493b48477a
commit e0691e70e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 10 additions and 5 deletions

View File

@ -1,3 +1,4 @@
< 3.2.0.beta4-dev: 493b48477a9288f2f1b6f021954088705a6673d6
< 3.2.0.beta2-dev: 3bced1c6f525553fe2b5b79d29bd66c1cf2a47d5 < 3.2.0.beta2-dev: 3bced1c6f525553fe2b5b79d29bd66c1cf2a47d5
3.1.999: c0415bb7eb878b1b7abf112d65cba981030df8df 3.1.999: c0415bb7eb878b1b7abf112d65cba981030df8df
< 3.2.0.beta1-dev: 3e7c99de894b03e9161d9481da118fe893991a1d < 3.2.0.beta1-dev: 3e7c99de894b03e9161d9481da118fe893991a1d

View File

@ -16,7 +16,7 @@ module DiscourseAi
:model, :model,
to: :completion_model to: :completion_model
def summarize(content, &on_partial_blk) def summarize(content, _user, &on_partial_blk)
opts = content.except(:contents) opts = content.except(:contents)
chunks = split_into_chunks(content[:contents]) chunks = split_into_chunks(content[:contents])

View File

@ -16,7 +16,7 @@ module DiscourseAi
:model, :model,
to: :completion_model to: :completion_model
def summarize(content, &on_partial_blk) def summarize(content, _user, &on_partial_blk)
opts = content.except(:contents) opts = content.except(:contents)
{ {

View File

@ -13,11 +13,13 @@ RSpec.describe DiscourseAi::Summarization::Strategies::FoldContent do
DiscourseAi::Tokenizer::BertTokenizer.size("(1 asd said: This is a text ") + 3 DiscourseAi::Tokenizer::BertTokenizer.size("(1 asd said: This is a text ") + 3
end end
let(:user) { User.new }
let(:content) { { contents: [{ poster: "asd", id: 1, text: summarize_text }] } } let(:content) { { contents: [{ poster: "asd", id: 1, text: summarize_text }] } }
context "when the content to summarize fits in a single call" do context "when the content to summarize fits in a single call" do
it "does one call to summarize content" do it "does one call to summarize content" do
result = strategy.summarize(content) result = strategy.summarize(content, user)
expect(model.summarization_calls).to eq(1) expect(model.summarization_calls).to eq(1)
expect(result[:summary]).to eq(DummyCompletionModel::SINGLE_SUMMARY) expect(result[:summary]).to eq(DummyCompletionModel::SINGLE_SUMMARY)
@ -28,7 +30,7 @@ RSpec.describe DiscourseAi::Summarization::Strategies::FoldContent do
it "summarizes each chunk and then concatenates them" do it "summarizes each chunk and then concatenates them" do
content[:contents] << { poster: "asd2", id: 2, text: summarize_text } content[:contents] << { poster: "asd2", id: 2, text: summarize_text }
result = strategy.summarize(content) result = strategy.summarize(content, user)
expect(model.summarization_calls).to eq(3) expect(model.summarization_calls).to eq(3)
expect(result[:summary]).to eq(DummyCompletionModel::CONCATENATED_SUMMARIES) expect(result[:summary]).to eq(DummyCompletionModel::CONCATENATED_SUMMARIES)

View File

@ -10,13 +10,15 @@ RSpec.describe DiscourseAi::Summarization::Strategies::TruncateContent do
let(:model_tokens) { summarize_text.length } let(:model_tokens) { summarize_text.length }
let(:model) { DummyCompletionModel.new(model_tokens) } let(:model) { DummyCompletionModel.new(model_tokens) }
let(:user) { User.new }
let(:content) { { contents: [{ poster: "asd", id: 1, text: summarize_text }] } } let(:content) { { contents: [{ poster: "asd", id: 1, text: summarize_text }] } }
context "when the content to summarize doesn't fit in a single call" do context "when the content to summarize doesn't fit in a single call" do
it "summarizes a truncated version" do it "summarizes a truncated version" do
content[:contents] << { poster: "asd2", id: 2, text: summarize_text } content[:contents] << { poster: "asd2", id: 2, text: summarize_text }
result = strategy.summarize(content) result = strategy.summarize(content, user)
expect(model.summarization_calls).to eq(1) expect(model.summarization_calls).to eq(1)
expect(result[:summary]).to eq(DummyCompletionModel::SINGLE_SUMMARY) expect(result[:summary]).to eq(DummyCompletionModel::SINGLE_SUMMARY)