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

Commit 7107995

Browse files
committed
FIX: Strip uploads from msg when searching for rag fragments
1 parent a94daa1 commit 7107995

File tree

7 files changed

+56
-23
lines changed

7 files changed

+56
-23
lines changed

lib/completions/dialects/command.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ def tool_msg(msg)
110110
end
111111

112112
def user_msg(msg)
113-
content = prompt.text_only(msg)
113+
content = DiscourseAi::Completions::Prompt.text_only(msg)
114114
user_message = { role: "USER", message: content }
115115
user_message[:message] = "#{msg[:id]}: #{content}" if msg[:id]
116116
user_message

lib/completions/dialects/nova.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ def user_msg(msg)
156156
end
157157
end
158158

159-
{ role: "user", content: prompt.text_only(msg), images: images }
159+
{ role: "user", content: DiscourseAi::Completions::Prompt.text_only(msg), images: images }
160160
end
161161

162162
def model_msg(msg)

lib/completions/dialects/ollama.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def enable_native_tool?
6969
end
7070

7171
def user_msg(msg)
72-
user_message = { role: "user", content: prompt.text_only(msg) }
72+
user_message = { role: "user", content: DiscourseAi::Completions::Prompt.text_only(msg) }
7373

7474
encoded_uploads = prompt.encoded_uploads(msg)
7575
if encoded_uploads.present?

lib/completions/prompt.rb

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@ class Prompt
88
attr_reader :messages, :tools, :system_message_text
99
attr_accessor :topic_id, :post_id, :max_pixels, :tool_choice
1010

11+
def self.text_only(message)
12+
if message[:content].is_a?(Array)
13+
message[:content].map { |element| element if element.is_a?(String) }.compact.join
14+
else
15+
message[:content]
16+
end
17+
end
18+
1119
def initialize(
1220
system_message_text = nil,
1321
messages: [],
@@ -146,14 +154,6 @@ def encoded_uploads(message)
146154
[]
147155
end
148156

149-
def text_only(message)
150-
if message[:content].is_a?(Array)
151-
message[:content].map { |element| element if element.is_a?(String) }.compact.join
152-
else
153-
message[:content]
154-
end
155-
end
156-
157157
def encode_upload(upload_id)
158158
UploadEncoder.encode(upload_ids: [upload_id], max_pixels: max_pixels).first
159159
end

lib/personas/persona.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ def rag_fragments_prompt(conversation_context, llm:, user:)
365365

366366
# first response
367367
if latest_interactions.length == 1
368-
consolidated_question = latest_interactions[0][:content]
368+
consolidated_question = DiscourseAi::Completions::Prompt.text_only(latest_interactions[0])
369369
else
370370
consolidated_question =
371371
DiscourseAi::Personas::QuestionConsolidator.consolidate_question(

lib/personas/question_consolidator.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def revised_prompt
3333
row = +""
3434
row << ((message[:type] == :user) ? "user" : "model")
3535

36-
content = message[:content]
36+
content = DiscourseAi::Completions::Prompt.text_only(message)
3737
current_tokens = @llm.tokenizer.tokenize(content).length
3838

3939
allowed_tokens = @max_tokens - tokens

spec/lib/personas/persona_spec.rb

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -306,21 +306,24 @@ def system_prompt
306306

307307
fab!(:llm_model) { Fabricate(:fake_model) }
308308

309-
it "will run the question consolidator" do
309+
fab!(:custom_ai_persona) do
310+
Fabricate(
311+
:ai_persona,
312+
name: "custom",
313+
rag_conversation_chunks: 3,
314+
allowed_group_ids: [Group::AUTO_GROUPS[:trust_level_0]],
315+
question_consolidator_llm_id: llm_model.id,
316+
)
317+
end
318+
319+
before do
310320
context_embedding = vector_def.dimensions.times.map { rand(-1.0...1.0) }
311321
EmbeddingsGenerationStubs.hugging_face_service(consolidated_question, context_embedding)
312322

313-
custom_ai_persona =
314-
Fabricate(
315-
:ai_persona,
316-
name: "custom",
317-
rag_conversation_chunks: 3,
318-
allowed_group_ids: [Group::AUTO_GROUPS[:trust_level_0]],
319-
question_consolidator_llm_id: llm_model.id,
320-
)
321-
322323
UploadReference.ensure_exist!(target: custom_ai_persona, upload_ids: [upload.id])
324+
end
323325

326+
it "will run the question consolidator" do
324327
custom_persona =
325328
DiscourseAi::Personas::Persona.find_by(id: custom_ai_persona.id, user: user).new
326329

@@ -343,6 +346,36 @@ def system_prompt
343346
expect(message).to include("the time is 1")
344347
expect(message).to include("in france?")
345348
end
349+
350+
context "when there are messages with uploads" do
351+
let(:image100x100) { plugin_file_from_fixtures("100x100.jpg") }
352+
let(:image_upload) do
353+
UploadCreator.new(image100x100, "image.jpg").create_for(Discourse.system_user.id)
354+
end
355+
356+
it "the question consolidator works" do
357+
custom_persona =
358+
DiscourseAi::Personas::Persona.find_by(id: custom_ai_persona.id, user: user).new
359+
360+
context.messages = [
361+
{ content: "Tell me the time", type: :user },
362+
{ content: "the time is 1", type: :model },
363+
{ content: ["in france?", { upload_id: image_upload.id }], type: :user },
364+
]
365+
366+
DiscourseAi::Completions::Endpoints::Fake.with_fake_content(consolidated_question) do
367+
custom_persona.craft_prompt(context).messages.first[:content]
368+
end
369+
370+
message =
371+
DiscourseAi::Completions::Endpoints::Fake.last_call[:dialect].prompt.messages.last[
372+
:content
373+
]
374+
expect(message).to include("Tell me the time")
375+
expect(message).to include("the time is 1")
376+
expect(message).to include("in france?")
377+
end
378+
end
346379
end
347380

348381
context "when a persona has RAG uploads" do

0 commit comments

Comments
 (0)