
    +#h
              
           d dl mZ d dlZd dlZdededee   fdZdee   dedee   fdZ	ddee   ded	e
dee   fd
Zy)    )IterableNquerykreturnc                    t         j                  j                  st        d      t        j                  j                  | fd|i|}t	        |t
              s|g}|D cg c]  }|j                   }}t         j                  j                  rMt         j                  j                  | |      }t        j                  |      ddd   }|D cg c]  }||   	 }}|S c c}w c c}w )zLRetrieves passages from the RM for the query and returns the top k passages.No RM is loaded.r   N)
dspsettingsrmAssertionError
isinstancer   	long_textrerankernpargsort)r   r   kwargspassagespsgpassages_cs_scorespassages_cs_scores_sortedidxs           R/var/www/html/sandstorm/venv/lib/python3.12/site-packages/dsp/primitives/search.pyretriever      s    <<??/00||u44V4Hh) :)12#2H2
|| \\225(C$&JJ/A$B4R4$H!-FGcHSMGGO 3
 Hs   CC"queriesc                    t         j                  j                  rt         j                  j                  st	        d      | D cg c]  }|s|	 } }i }| D ]  }t        j                  j                  |fd|dz  i|}t         j                  j                  ||D cg c]  }|j
                   c}      }t        j                  |      d d d   D ]7  }	||	   }|j                  |j
                  g       ||	   gz   ||j
                  <   9  |j                         D 
cg c]  \  }
}t        j                  |      |
f }}
}t        |d      d | D 
cg c]  \  }}
|
	 c}
}S c c}w c c}w c c}}
w c c}
}w )Nz6Both RM and Reranker are needed to retrieve & re-rank.r      r	   Treverse)r
   r   r   r   r   r   r   r   getitemsaveragesorted)r   r   r   qr   r   retrieved_passagesr   r   r   textscore_s                r   retrieveRerankEnsembler)      sX   LLOO 5 5UVV!'QQq'G'H  \\__UCacCFC \\225Tf:gS3==:gh::01$B$7 	C$S)C&.ll3=="&E"3'I 'HS]]#	 >F^^=MNkdEE"D)NHN &x >r BCWQDCC ( ;h OCs   E'E'E, !E1E7by_probc                    t         j                  j                  st        d      t         j                  j                  rt        | |      S | D cg c]  }|s|	 } }t        |       dk(  rt        | d   |fi |S i }| D ]  }t        j                  j                  |fd|dz  i|D ]q  }|r7|j                  |j                  d      |j                  z   ||j                  <   <|j                  |j                  d      |j                  z   ||j                  <   s  |j                         D cg c]	  \  }}||f }}}t        |d      d	| }|D 	cg c]  \  }	}|	 }}	}|S c c}w c c}}w c c}}	w )
zRetrieves passages from the RM for each query in queries and returns the top k passages
    based on the probability or score.
    r      r   r   r   g        Tr   N)r
   r   r   r   r   r)   lenr   r    r   probr'   r!   r#   )
r   r   r*   r   r$   r   r   r&   r'   r(   s
             r   retrieveEnsembler/   -   s^    <<??/00
||%gq11!'QQq'G'
7|q
A000H W<<??17A77 	WC*2,,s}}c*JSXX*U'*2,,s}}c*JSYY*V'		WW 2:1AB+$BHBh-bq1H$,-D-H-O# ( C-s   E(E(1E-E3)T)collections.abcr   numpyr   r
   strintlistr   r)   boolr/        r   <module>r8      s~    $  
C C d3i &DDI D# D49 D$d3i C $ SWX[S\ r7   