diff --git a/src/codeweaver/providers/reranking/providers/base.py b/src/codeweaver/providers/reranking/providers/base.py index 28e7a93b..1cf6908c 100644 --- a/src/codeweaver/providers/reranking/providers/base.py +++ b/src/codeweaver/providers/reranking/providers/base.py @@ -91,10 +91,14 @@ def default_reranking_output_transformer( mapped_scores = sorted( ((i, score) for i, score in enumerate(results)), key=lambda x: x[1], reverse=True ) + + # Performance: Pre-compute rank map to avoid O(n^2) algorithmic complexity from nested iteration over mapped_scores + rank_map = {idx: j + 1 for j, (idx, _) in enumerate(mapped_scores)} + processed_results.extend( RerankingResult( original_index=i, - batch_rank=next((j + 1 for j, (idx, _) in enumerate(mapped_scores) if idx == i), -1), + batch_rank=rank_map.get(i, -1), score=score, chunk=chunk, )