def small_to_large_retrieve( query, child_top_k=10, parent_top_k=3, ): child_results = retrieve_dense( query, child_df, top_k=child_top_k, ) best_parent_scores = ( child_results .groupby( "parent_id", as_index=False, )["retrieval_score"] .max() .sort_values( "retrieval_score", ascending=False, ) .head(parent_top_k) ) expanded = best_parent_scores.merge( parent_df, on="parent_id", how="left", ) return child_results, expanded __ __