11"""Integration tests for hybrid search + MMR diversity selection.
22
3- ``DiversitySelection`` passed inside ``HybridVector.near_vector`` /
4- ``HybridVector.near_text`` is applied by the server as a post-fusion MMR pass
5- (Weaviate >= 1.39.0). These tests assert that ``balance=0`` (pure diversity)
6- produces a different ordering than ``balance=1`` (pure relevance), and that
7- ``mmr.limit`` caps the result count.
3+ ``diversity_selection`` is a hybrid-level argument: the server applies it as a
4+ post-fusion MMR pass (Weaviate >= 1.38.6). These tests assert that ``balance=0``
5+ (pure diversity) produces a different ordering than ``balance=1`` (pure
6+ relevance), and that ``mmr.limit`` caps the result count.
87
98The equivalent ``near_vector`` behaviour is covered in
109``test_collection_diversity.py``.
@@ -68,18 +67,14 @@ def test_hybrid_near_vector_balance_0_differs_from_balance_1(
6867 collection = _create_clustered_collection (collection_factory )
6968 balance_0 = collection .query .hybrid (
7069 query = None ,
71- vector = HybridVector .near_vector (
72- vector = [1.0 , 0.0 , 0.0 ],
73- diversity_selection = Diversity .mmr (limit = 3 , balance = 0.0 ),
74- ),
70+ vector = HybridVector .near_vector (vector = [1.0 , 0.0 , 0.0 ]),
71+ diversity_selection = Diversity .mmr (limit = 3 , balance = 0.0 ),
7572 limit = 3 ,
7673 ).objects
7774 balance_1 = collection .query .hybrid (
7875 query = None ,
79- vector = HybridVector .near_vector (
80- vector = [1.0 , 0.0 , 0.0 ],
81- diversity_selection = Diversity .mmr (limit = 3 , balance = 1.0 ),
82- ),
76+ vector = HybridVector .near_vector (vector = [1.0 , 0.0 , 0.0 ]),
77+ diversity_selection = Diversity .mmr (limit = 3 , balance = 1.0 ),
8378 limit = 3 ,
8479 ).objects
8580 assert [o .uuid for o in balance_0 ] != [o .uuid for o in balance_1 ]
@@ -97,10 +92,8 @@ def test_hybrid_near_vector_balance_1_matches_baseline(
9792 ).objects
9893 mmr_balance_1 = collection .query .hybrid (
9994 query = None ,
100- vector = HybridVector .near_vector (
101- vector = [1.0 , 0.0 , 0.0 ],
102- diversity_selection = Diversity .mmr (limit = 3 , balance = 1.0 ),
103- ),
95+ vector = HybridVector .near_vector (vector = [1.0 , 0.0 , 0.0 ]),
96+ diversity_selection = Diversity .mmr (limit = 3 , balance = 1.0 ),
10497 limit = 3 ,
10598 ).objects
10699 assert [o .uuid for o in baseline ] == [o .uuid for o in mmr_balance_1 ]
@@ -114,19 +107,15 @@ def test_hybrid_alpha_1_balance_0_differs_from_balance_1(
114107 balance_0 = collection .query .hybrid (
115108 query = "irrelevant" ,
116109 alpha = 1.0 ,
117- vector = HybridVector .near_vector (
118- vector = [1.0 , 0.0 , 0.0 ],
119- diversity_selection = Diversity .mmr (limit = 3 , balance = 0.0 ),
120- ),
110+ vector = HybridVector .near_vector (vector = [1.0 , 0.0 , 0.0 ]),
111+ diversity_selection = Diversity .mmr (limit = 3 , balance = 0.0 ),
121112 limit = 3 ,
122113 ).objects
123114 balance_1 = collection .query .hybrid (
124115 query = "irrelevant" ,
125116 alpha = 1.0 ,
126- vector = HybridVector .near_vector (
127- vector = [1.0 , 0.0 , 0.0 ],
128- diversity_selection = Diversity .mmr (limit = 3 , balance = 1.0 ),
129- ),
117+ vector = HybridVector .near_vector (vector = [1.0 , 0.0 , 0.0 ]),
118+ diversity_selection = Diversity .mmr (limit = 3 , balance = 1.0 ),
130119 limit = 3 ,
131120 ).objects
132121 assert [o .uuid for o in balance_0 ] != [o .uuid for o in balance_1 ]
@@ -141,9 +130,7 @@ def test_hybrid_respects_mmr_limit(
141130
142131 result = collection .query .hybrid (
143132 query = None ,
144- vector = HybridVector .near_vector (
145- vector = [1.0 , 0.0 , 0.0 ],
146- diversity_selection = Diversity .mmr (limit = mmr_limit , balance = 0.5 ),
147- ),
133+ vector = HybridVector .near_vector (vector = [1.0 , 0.0 , 0.0 ]),
134+ diversity_selection = Diversity .mmr (limit = mmr_limit , balance = 0.5 ),
148135 ).objects
149136 assert len (result ) == mmr_limit
0 commit comments