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