@@ -44,6 +44,7 @@ def __init__(
4444 filters : dict [str , Any ] | None = None ,
4545 top_k : int = 10 ,
4646 scale_score : bool = False ,
47+ include_confidence : bool = False ,
4748 filter_policy : FilterPolicy = FilterPolicy .REPLACE ,
4849 ) -> None :
4950 """
@@ -58,6 +59,10 @@ def __init__(
5859 :param scale_score:
5960 When `True`, scales the score of retrieved documents to a range of 0 to 1, where 1 means extremely relevant.
6061 When `False`, uses raw similarity scores.
62+ :param include_confidence:
63+ When `True`, adds optional retrieval confidence metadata to returned documents when `scale_score` is also
64+ `True`. The metadata is exposed via `Document.meta["retrieval_confidence"]` and
65+ `Document.meta["retrieval_confidence_source"]`.
6166 :param filter_policy: The filter policy to apply during retrieval.
6267 Filter policy determines how filters are applied when retrieving documents. You can choose:
6368 - `REPLACE` (default): Overrides the initialization filters with the filters specified at runtime.
@@ -78,6 +83,7 @@ def __init__(
7883 self .filters = filters
7984 self .top_k = top_k
8085 self .scale_score = scale_score
86+ self .include_confidence = include_confidence
8187 self .filter_policy = filter_policy
8288
8389 def _get_telemetry_data (self ) -> dict [str , Any ]:
@@ -99,6 +105,7 @@ def to_dict(self) -> dict[str, Any]:
99105 filters = self .filters ,
100106 top_k = self .top_k ,
101107 scale_score = self .scale_score ,
108+ include_confidence = self .include_confidence ,
102109 filter_policy = self .filter_policy .value ,
103110 )
104111
@@ -124,6 +131,7 @@ def run(
124131 filters : dict [str , Any ] | None = None ,
125132 top_k : int | None = None ,
126133 scale_score : bool | None = None ,
134+ include_confidence : bool | None = None ,
127135 ) -> dict [str , list [Document ]]:
128136 """
129137 Run the InMemoryBM25Retriever on the given input data.
@@ -137,6 +145,9 @@ def run(
137145 :param scale_score:
138146 When `True`, scales the score of retrieved documents to a range of 0 to 1, where 1 means extremely relevant.
139147 When `False`, uses raw similarity scores.
148+ :param include_confidence:
149+ When `True`, adds optional retrieval confidence metadata to returned documents when `scale_score` is also
150+ `True`. When `False`, no retrieval confidence metadata is added.
140151 :returns:
141152 The retrieved documents.
142153
@@ -151,8 +162,12 @@ def run(
151162 top_k = self .top_k
152163 if scale_score is None :
153164 scale_score = self .scale_score
165+ if include_confidence is None :
166+ include_confidence = self .include_confidence
154167
155168 docs = self .document_store .bm25_retrieval (query = query , filters = filters , top_k = top_k , scale_score = scale_score )
169+ if include_confidence and scale_score :
170+ self ._add_confidence_metadata (docs )
156171 return {"documents" : docs }
157172
158173 @component .output_types (documents = list [Document ])
@@ -162,6 +177,7 @@ async def run_async(
162177 filters : dict [str , Any ] | None = None ,
163178 top_k : int | None = None ,
164179 scale_score : bool | None = None ,
180+ include_confidence : bool | None = None ,
165181 ) -> dict [str , list [Document ]]:
166182 """
167183 Run the InMemoryBM25Retriever on the given input data.
@@ -175,6 +191,9 @@ async def run_async(
175191 :param scale_score:
176192 When `True`, scales the score of retrieved documents to a range of 0 to 1, where 1 means extremely relevant.
177193 When `False`, uses raw similarity scores.
194+ :param include_confidence:
195+ When `True`, adds optional retrieval confidence metadata to returned documents when `scale_score` is also
196+ `True`. When `False`, no retrieval confidence metadata is added.
178197 :returns:
179198 The retrieved documents.
180199
@@ -189,8 +208,20 @@ async def run_async(
189208 top_k = self .top_k
190209 if scale_score is None :
191210 scale_score = self .scale_score
211+ if include_confidence is None :
212+ include_confidence = self .include_confidence
192213
193214 docs = await self .document_store .bm25_retrieval_async (
194215 query = query , filters = filters , top_k = top_k , scale_score = scale_score
195216 )
217+ if include_confidence and scale_score :
218+ self ._add_confidence_metadata (docs )
196219 return {"documents" : docs }
220+
221+ @staticmethod
222+ def _add_confidence_metadata (documents : list [Document ]) -> None :
223+ for document in documents :
224+ if document .score is None :
225+ continue
226+ document .meta ["retrieval_confidence" ] = document .score
227+ document .meta ["retrieval_confidence_source" ] = "bm25_scaled_score"
0 commit comments