# api/router_rerank.py from fastapi import APIRouter import numpy as np from consensus.topo import TopologicalConsciousness from api.schemas import RerankRequest from adapters.hf_sentence_tfm_adapter import SentenceTransformerAdapter router = APIRouter(prefix="/rerank", tags=["rag"]) @router.post("") def rerank(req: RerankRequest): model = SentenceTransformerAdapter() q = np.array(model.embed_text(req.query)) doc_embs = [np.array(model.embed_text(d)) for d in req.docs] tc = TopologicalConsciousness(n_anyons=len(doc_embs), central_charge=627) pc = tc.calculate_coherence(doc_embs) alpha, beta, lamb = 1.0, 0.3, 0.2 scores = [] qn = q / (np.linalg.norm(q) + 1e-12) for e in doc_embs: en = e / (np.linalg.norm(e) + 1e-12) sim = float(qn @ en) energy = tc.cardy_boundary_energy(e) scores.append(alpha*sim + beta*pc - lamb*energy) order = np.argsort(scores)[::-1].tolist() return {"order": order, "scores": [float(s) for s in scores], "coherence": pc}