@@ -62,6 +62,7 @@ def __init__(self, **kwargs):
6262 if not retriever_weights :
6363 retriever_weights = [1.0 ] * len (kwargs ["retrievers" ])
6464 self ._custom_retriever_weights = retriever_weights
65+ self ._index_configs = kwargs .get ("index_configs" , None )
6566
6667 def _simple_fusion (self , results ):
6768 """Override internal method and apply weighted score."""
@@ -72,16 +73,37 @@ def _simple_fusion(self, results):
7273 # Current dynamic weights marginally penalize the score.
7374 all_nodes = {}
7475 for i , nodes_with_scores in enumerate (results .values ()):
76+ # Getting index metadata based on available index configs
77+ index_id = ""
78+ index_origin = ""
79+ if self ._index_configs and i < len (self ._index_configs ):
80+ index_config = self ._index_configs [i ]
81+ index_id = index_config .product_docs_index_id or ""
82+ index_origin = index_config .product_docs_origin or "default"
83+
7584 for j , node_with_score in enumerate (nodes_with_scores ):
85+ # Add index metadata to node
86+ node_with_score .node .metadata ["index_id" ] = index_id
87+ node_with_score .node .metadata ["index_origin" ] = index_origin
88+
7689 node_index_id = f"{ i } _{ j } "
7790 all_nodes [node_index_id ] = node_with_score
7891 # weighted_score = node_with_score.score * self._custom_retriever_weights[i]
7992 # Uncomment above and delete below, if we decide weights to be set from config.
80- weighted_score = node_with_score .score * (
93+ original_score = node_with_score .score
94+ weighted_score = original_score * (
8195 1 - min (i , SCORE_DILUTION_DEPTH - 1 ) * SCORE_DILUTION_WEIGHT
8296 )
8397 all_nodes [node_index_id ].score = weighted_score
8498
99+ logger .debug (
100+ "Document from index #%d (%s): original_score=%.4f, weighted_score=%.4f" ,
101+ i ,
102+ index_origin or index_id or "unknown" ,
103+ original_score ,
104+ weighted_score ,
105+ )
106+
85107 return sorted (
86108 all_nodes .values (), key = lambda x : x .score or 0.0 , reverse = True
87109 )
@@ -199,6 +221,19 @@ def get_retriever(
199221 ):
200222 return self ._retriever
201223
224+ # Log index information
225+ index_info = [
226+ f"{ i } : { cfg .product_docs_origin or cfg .product_docs_index_id or 'unknown' } "
227+ for i , cfg in enumerate (self ._index_config .indexes or [])
228+ if cfg is not None
229+ ]
230+ logger .info (
231+ "Creating retriever for %d indexes (similarity_top_k=%d): %s" ,
232+ len (self ._indexes ),
233+ similarity_top_k ,
234+ index_info ,
235+ )
236+
202237 # Note: we are using a custom retriever, based on our need
203238 retriever = QueryFusionRetrieverCustom (
204239 retrievers = [
@@ -207,6 +242,7 @@ def get_retriever(
207242 ],
208243 similarity_top_k = similarity_top_k ,
209244 retriever_weights = None , # Setting as None, until this gets added to config
245+ index_configs = self ._index_config .indexes if self ._index_config else None ,
210246 mode = "simple" , # Don't modify this as we are adding our own logic
211247 num_queries = 1 , # set this to 1 to disable query generation
212248 use_async = False ,
0 commit comments