@@ -373,41 +373,44 @@ def system_prompt
373373 end
374374
375375 context "when a persona has RAG uploads" do
376- def stub_fragments ( limit , expected_limit : nil )
377- candidate_ids = [ ]
378-
379- limit . times do |i |
380- candidate_ids << Fabricate (
381- :rag_document_fragment ,
382- fragment : "fragment-n#{ i } " ,
383- target_id : ai_persona . id ,
384- target_type : "AiPersona" ,
385- upload : upload ,
386- ) . id
387- end
376+ let ( :vector_rep ) do
377+ DiscourseAi ::Embeddings ::VectorRepresentations ::Base . current_representation
378+ end
379+ let ( :embedding_value ) { 0.04381 }
380+ let ( :prompt_cc_embeddings ) { [ embedding_value ] * vector_rep . dimensions }
381+
382+ def stub_fragments ( fragment_count , persona : ai_persona )
383+ schema = DiscourseAi ::Embeddings ::Schema . for ( RagDocumentFragment , vector : vector_rep )
384+
385+ fragment_count . times do |i |
386+ fragment =
387+ Fabricate (
388+ :rag_document_fragment ,
389+ fragment : "fragment-n#{ i } " ,
390+ target_id : persona . id ,
391+ target_type : "AiPersona" ,
392+ upload : upload ,
393+ )
388394
389- DiscourseAi :: Embeddings :: VectorRepresentations :: BgeLargeEn
390- . any_instance
391- . expects ( :asymmetric_rag_fragment_similarity_search )
392- . with { | args , kwargs | kwargs [ :limit ] == ( expected_limit || limit ) }
393- . returns ( candidate_ids )
395+ # Similarity is determined left-to-right.
396+ embeddings = [ embedding_value + "0.000 #{ i } " . to_f ] * vector_rep . dimensions
397+
398+ schema . store ( fragment , embeddings , "test" )
399+ end
394400 end
395401
396402 before do
397403 stored_ai_persona = AiPersona . find ( ai_persona . id )
398404 UploadReference . ensure_exist! ( target : stored_ai_persona , upload_ids : [ upload . id ] )
399405
400- context_embedding = [ 0.049382 , 0.9999 ]
401406 EmbeddingsGenerationStubs . discourse_service (
402407 SiteSetting . ai_embeddings_model ,
403408 with_cc . dig ( :conversation_context , 0 , :content ) ,
404- context_embedding ,
409+ prompt_cc_embeddings ,
405410 )
406411 end
407412
408413 context "when persona allows for less fragments" do
409- before { stub_fragments ( 3 ) }
410-
411414 it "will only pick 3 fragments" do
412415 custom_ai_persona =
413416 Fabricate (
@@ -417,6 +420,8 @@ def stub_fragments(limit, expected_limit: nil)
417420 allowed_group_ids : [ Group ::AUTO_GROUPS [ :trust_level_0 ] ] ,
418421 )
419422
423+ stub_fragments ( 3 , persona : custom_ai_persona )
424+
420425 UploadReference . ensure_exist! ( target : custom_ai_persona , upload_ids : [ upload . id ] )
421426
422427 custom_persona =
@@ -436,13 +441,10 @@ def stub_fragments(limit, expected_limit: nil)
436441 context "when the reranker is available" do
437442 before do
438443 SiteSetting . ai_hugging_face_tei_reranker_endpoint = "https://test.reranker.com"
439-
440- # hard coded internal implementation, reranker takes x5 number of chunks
441- stub_fragments ( 15 , expected_limit : 50 ) # Mimic limit being more than 10 results
444+ stub_fragments ( 15 )
442445 end
443446
444447 it "uses the re-ranker to reorder the fragments and pick the top 10 candidates" do
445- skip "This test is flaky needs to be investigated ordering does not come back as expected"
446448 expected_reranked = ( 0 ..14 ) . to_a . reverse . map { |idx | { index : idx } }
447449
448450 WebMock . stub_request ( :post , "https://test.reranker.com/rerank" ) . to_return (
0 commit comments