9x25dillon's picture
Create api/router_rerank.py
8fa5bbb verified
# 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}