Multiple queries: send a ``_MultiQuery`` to C++. A Python-only reranker (e.g. a model/API-based one) cannot run inside the C++ MultiQuery, so each route is executed individually and merged by the reranker in Python. The built-in RRF/Weighted/Callback rerankers use th
(
self, ctx: QueryContext, queries: list[_SearchQuery], collection: _Collection
)
| 140 | return [convert_to_py_doc(doc, self._schema) for doc in docs] |
| 141 | |
| 142 | def _execute_multi_query( |
| 143 | self, ctx: QueryContext, queries: list[_SearchQuery], collection: _Collection |
| 144 | ) -> DocList: |
| 145 | """Multiple queries: send a ``_MultiQuery`` to C++. |
| 146 | |
| 147 | A Python-only reranker (e.g. a model/API-based one) cannot run inside |
| 148 | the C++ MultiQuery, so each route is executed individually and merged by |
| 149 | the reranker in Python. The built-in RRF/Weighted/Callback rerankers use |
| 150 | the C++ variant-based fast path. |
| 151 | """ |
| 152 | reranker = ctx.reranker |
| 153 | if reranker is None: |
| 154 | raise ValueError( |
| 155 | "A reranker is required to merge results from multiple queries; " |
| 156 | "specify the 'reranker' argument." |
| 157 | ) |
| 158 | if not isinstance(reranker, (RrfReRanker, WeightedReRanker, CallbackReRanker)): |
| 159 | docs_list = self._execute_python_pipeline(queries, collection) |
| 160 | return self._merge_and_rerank(ctx, docs_list) |
| 161 | |
| 162 | multi_query = self._build_multi_query(ctx, queries) |
| 163 | docs = collection.Query(multi_query) |
| 164 | return [convert_to_py_doc(doc, self._schema) for doc in docs] |
| 165 | |
| 166 | def _build_multi_query( |
| 167 | self, ctx: QueryContext, queries: list[_SearchQuery] |
no test coverage detected