"""rerank 백엔드 응답 정규화 — 2노드 이관 (2026-07-02, main-server-retirement-1 P1-4). TEI(/rerank)와 llama.cpp(/v1/rerank)는 요청/응답 스키마가 다르다. 소비자(rerank_service)는 TEI 형태 [{"index": int, "score": float}]를 기대하므로 llama.cpp 응답을 여기서 정규화한다. 순수 함수(stdlib only) — 단위 테스트 대상. """ def normalize_llamacpp_rerank(payload: dict) -> list[dict]: """llama.cpp /v1/rerank 응답을 TEI 형태로 정규화. 입력: {"results": [{"index": int, "relevance_score": float}, ...], ...} 반환: [{"index": int, "score": float}, ...] (score 내림차순 — TEI '정렬됨' 계약 유지) index/relevance_score 가 없는 항목은 버린다 (소비자 측 idx/sc None 가드와 동일 방어). """ results = payload.get("results") or [] normalized = [ {"index": r["index"], "score": float(r["relevance_score"])} for r in results if r.get("index") is not None and r.get("relevance_score") is not None ] normalized.sort(key=lambda r: -r["score"]) return normalized