|
134 | 134 | allow(InferredConcept).to receive(:where).with(name: ["programming"]).and_return([concept1]) |
135 | 135 |
|
136 | 136 | # Mock the LLM interaction |
137 | | - persona_double = instance_spy(AiPersona) |
| 137 | + persona_instance_double = instance_spy("DiscourseAi::Personas::Persona") |
138 | 138 | bot_double = instance_spy(DiscourseAi::Personas::Bot) |
139 | | - structured_output_double = double("StructuredOutput") |
140 | | - llm_class_double = double("PersonaClass", default_llm_id: llm_model.id) |
141 | | - |
142 | | - allow(AiPersona).to receive_message_chain(:all_personas, :find, :new).and_return( |
143 | | - persona_double, |
144 | | - ) |
145 | | - allow(persona_double).to receive(:class).and_return(llm_class_double) |
| 139 | + structured_output_double = instance_double("DiscourseAi::Completions::StructuredOutput") |
| 140 | + persona_class_double = double("PersonaClass") # rubocop:disable RSpec/VerifiedDoubles |
| 141 | + |
| 142 | + allow(AiPersona).to receive(:all_personas).and_return([persona_class_double]) |
| 143 | + allow(persona_class_double).to receive(:id).and_return(SiteSetting.inferred_concepts_match_persona.to_i) |
| 144 | + allow(persona_class_double).to receive(:new).and_return(persona_instance_double) |
| 145 | + allow(persona_class_double).to receive(:default_llm_id).and_return(llm_model.id) |
| 146 | + allow(persona_instance_double).to receive(:class).and_return(persona_class_double) |
146 | 147 | allow(LlmModel).to receive(:find).and_return(llm_model) |
147 | 148 | allow(DiscourseAi::Personas::Bot).to receive(:as).and_return(bot_double) |
148 | 149 | allow(bot_double).to receive(:reply).and_yield( |
|
183 | 184 | allow(InferredConcept).to receive(:where).with(name: ["testing"]).and_return([concept2]) |
184 | 185 |
|
185 | 186 | # Mock the LLM interaction |
186 | | - persona_double = instance_spy(AiPersona) |
| 187 | + persona_instance_double = instance_spy("DiscourseAi::Personas::Persona") |
187 | 188 | bot_double = instance_spy(DiscourseAi::Personas::Bot) |
188 | | - structured_output_double = double("StructuredOutput") |
189 | | - llm_class_double = double("PersonaClass", default_llm_id: llm_model.id) |
190 | | - |
191 | | - allow(AiPersona).to receive_message_chain(:all_personas, :find, :new).and_return( |
192 | | - persona_double, |
193 | | - ) |
194 | | - allow(persona_double).to receive(:class).and_return(llm_class_double) |
| 189 | + structured_output_double = instance_double("DiscourseAi::Completions::StructuredOutput") |
| 190 | + persona_class_double = double("PersonaClass") # rubocop:disable RSpec/VerifiedDoubles |
| 191 | + |
| 192 | + allow(AiPersona).to receive(:all_personas).and_return([persona_class_double]) |
| 193 | + allow(persona_class_double).to receive(:id).and_return(SiteSetting.inferred_concepts_match_persona.to_i) |
| 194 | + allow(persona_class_double).to receive(:new).and_return(persona_instance_double) |
| 195 | + allow(persona_class_double).to receive(:default_llm_id).and_return(llm_model.id) |
| 196 | + allow(persona_instance_double).to receive(:class).and_return(persona_class_double) |
195 | 197 | allow(LlmModel).to receive(:find).and_return(llm_model) |
196 | 198 | allow(DiscourseAi::Personas::Bot).to receive(:as).and_return(bot_double) |
197 | 199 | allow(bot_double).to receive(:reply).and_yield( |
|
219 | 221 | it "uses ConceptMatcher persona to match concepts" do |
220 | 222 | content = "This is about Ruby programming" |
221 | 223 | concept_list = %w[programming testing ruby] |
222 | | - structured_output_double = double("StructuredOutput") |
| 224 | + structured_output_double = instance_double("DiscourseAi::Completions::StructuredOutput") |
223 | 225 |
|
224 | | - persona_class_double = double("PersonaClass", default_llm_id: llm_model.id) |
225 | | - persona_double = instance_spy(AiPersona) |
| 226 | + persona_class_double = double("PersonaClass") # rubocop:disable RSpec/VerifiedDoubles |
| 227 | + persona_instance_double = instance_spy("DiscourseAi::Personas::Persona") |
226 | 228 | bot_double = instance_spy(DiscourseAi::Personas::Bot) |
227 | 229 |
|
228 | | - allow(AiPersona).to receive_message_chain(:all_personas, :find).and_return( |
229 | | - persona_class_double, |
230 | | - ) |
231 | | - allow(persona_class_double).to receive(:new).and_return(persona_double) |
232 | | - allow(persona_double).to receive(:class).and_return(persona_class_double) |
| 230 | + allow(AiPersona).to receive(:all_personas).and_return([persona_class_double]) |
| 231 | + allow(persona_class_double).to receive(:id).and_return(SiteSetting.inferred_concepts_match_persona.to_i) |
| 232 | + allow(persona_class_double).to receive(:new).and_return(persona_instance_double) |
| 233 | + allow(persona_class_double).to receive(:default_llm_id).and_return(llm_model.id) |
| 234 | + allow(persona_instance_double).to receive(:class).and_return(persona_class_double) |
233 | 235 | allow(LlmModel).to receive(:find).and_return(llm_model) |
234 | 236 | allow(DiscourseAi::Personas::Bot).to receive(:as).and_return(bot_double) |
235 | 237 | allow(bot_double).to receive(:reply).and_yield( |
|
254 | 256 | content = "Test content" |
255 | 257 | concept_list = ["concept1"] |
256 | 258 |
|
257 | | - persona_class_double = double("ConceptMatcherClass", default_llm_id: llm_model.id) |
258 | | - persona_double = double("ConceptMatcher") |
259 | | - bot_double = double("Bot") |
| 259 | + persona_class_double = double("PersonaClass") # rubocop:disable RSpec/VerifiedDoubles |
| 260 | + persona_instance_double = instance_double("DiscourseAi::Personas::Persona") |
| 261 | + bot_double = instance_double("DiscourseAi::Personas::Bot") |
260 | 262 |
|
261 | | - expect(AiPersona).to receive_message_chain(:all_personas, :find).and_return( |
262 | | - persona_class_double, |
263 | | - ) |
264 | | - expect(persona_class_double).to receive(:new).and_return(persona_double) |
265 | | - expect(persona_double).to receive(:class).and_return(persona_class_double) |
266 | | - expect(LlmModel).to receive(:find).and_return(llm_model) |
267 | | - expect(DiscourseAi::Personas::Bot).to receive(:as).and_return(bot_double) |
268 | | - expect(bot_double).to receive(:reply).and_yield(nil, nil, :text) |
| 263 | + allow(AiPersona).to receive(:all_personas).and_return([persona_class_double]) |
| 264 | + allow(persona_class_double).to receive(:id).and_return(SiteSetting.inferred_concepts_match_persona.to_i) |
| 265 | + allow(persona_class_double).to receive(:new).and_return(persona_instance_double) |
| 266 | + allow(persona_class_double).to receive(:default_llm_id).and_return(llm_model.id) |
| 267 | + allow(persona_instance_double).to receive(:class).and_return(persona_class_double) |
| 268 | + allow(LlmModel).to receive(:find).and_return(llm_model) |
| 269 | + allow(DiscourseAi::Personas::Bot).to receive(:as).and_return(bot_double) |
| 270 | + allow(bot_double).to receive(:reply).and_yield(nil, nil, :text) |
269 | 271 |
|
270 | 272 | result = applier.match_concepts_to_content(content, concept_list) |
271 | 273 | expect(result).to eq([]) |
|
276 | 278 | concept_list = %w[programming testing] |
277 | 279 | expected_response = [['{"matching_concepts": []}']] |
278 | 280 |
|
279 | | - persona_class_double = double("ConceptMatcherClass", default_llm_id: llm_model.id) |
280 | | - persona_double = double("ConceptMatcher") |
281 | | - bot_double = double("Bot") |
| 281 | + persona_class_double = double("PersonaClass") # rubocop:disable RSpec/VerifiedDoubles |
| 282 | + persona_instance_double = instance_double("DiscourseAi::Personas::Persona") |
| 283 | + bot_double = instance_double("DiscourseAi::Personas::Bot") |
282 | 284 |
|
283 | | - expect(AiPersona).to receive_message_chain(:all_personas, :find).and_return( |
284 | | - persona_class_double, |
285 | | - ) |
286 | | - expect(persona_class_double).to receive(:new).and_return(persona_double) |
287 | | - expect(persona_double).to receive(:class).and_return(persona_class_double) |
288 | | - expect(LlmModel).to receive(:find).and_return(llm_model) |
289 | | - expect(DiscourseAi::Personas::Bot).to receive(:as).and_return(bot_double) |
290 | | - expect(bot_double).to receive(:reply).and_return(expected_response) |
| 285 | + allow(AiPersona).to receive(:all_personas).and_return([persona_class_double]) |
| 286 | + allow(persona_class_double).to receive(:id).and_return(SiteSetting.inferred_concepts_match_persona.to_i) |
| 287 | + allow(persona_class_double).to receive(:new).and_return(persona_instance_double) |
| 288 | + allow(persona_class_double).to receive(:default_llm_id).and_return(llm_model.id) |
| 289 | + allow(persona_instance_double).to receive(:class).and_return(persona_class_double) |
| 290 | + allow(LlmModel).to receive(:find).and_return(llm_model) |
| 291 | + allow(DiscourseAi::Personas::Bot).to receive(:as).and_return(bot_double) |
| 292 | + allow(bot_double).to receive(:reply).and_return(expected_response) |
291 | 293 |
|
292 | 294 | result = applier.match_concepts_to_content(content, concept_list) |
293 | 295 | expect(result).to eq([]) |
|
298 | 300 | concept_list = ["concept1"] |
299 | 301 | expected_response = [['{"other_key": ["value"]}']] |
300 | 302 |
|
301 | | - persona_class_double = double("ConceptMatcherClass", default_llm_id: llm_model.id) |
302 | | - persona_double = double("ConceptMatcher") |
303 | | - bot_double = double("Bot") |
| 303 | + persona_class_double = double("PersonaClass") # rubocop:disable RSpec/VerifiedDoubles |
| 304 | + persona_instance_double = instance_double("DiscourseAi::Personas::Persona") |
| 305 | + bot_double = instance_double("DiscourseAi::Personas::Bot") |
304 | 306 |
|
305 | | - expect(AiPersona).to receive_message_chain(:all_personas, :find).and_return( |
306 | | - persona_class_double, |
307 | | - ) |
308 | | - expect(persona_class_double).to receive(:new).and_return(persona_double) |
309 | | - expect(persona_double).to receive(:class).and_return(persona_class_double) |
310 | | - expect(LlmModel).to receive(:find).and_return(llm_model) |
311 | | - expect(DiscourseAi::Personas::Bot).to receive(:as).and_return(bot_double) |
312 | | - expect(bot_double).to receive(:reply).and_return(expected_response) |
| 307 | + allow(AiPersona).to receive(:all_personas).and_return([persona_class_double]) |
| 308 | + allow(persona_class_double).to receive(:id).and_return(SiteSetting.inferred_concepts_match_persona.to_i) |
| 309 | + allow(persona_class_double).to receive(:new).and_return(persona_instance_double) |
| 310 | + allow(persona_class_double).to receive(:default_llm_id).and_return(llm_model.id) |
| 311 | + allow(persona_instance_double).to receive(:class).and_return(persona_class_double) |
| 312 | + allow(LlmModel).to receive(:find).and_return(llm_model) |
| 313 | + allow(DiscourseAi::Personas::Bot).to receive(:as).and_return(bot_double) |
| 314 | + allow(bot_double).to receive(:reply).and_return(expected_response) |
313 | 315 |
|
314 | 316 | result = applier.match_concepts_to_content(content, concept_list) |
315 | 317 | expect(result).to eq([]) |
|
0 commit comments