Create api/router_rerank.py
Browse files- api/router_rerank.py +6 -4
api/router_rerank.py
CHANGED
|
@@ -3,22 +3,24 @@ from fastapi import APIRouter
|
|
| 3 |
import numpy as np
|
| 4 |
from consensus.topo import TopologicalConsciousness
|
| 5 |
from api.schemas import RerankRequest
|
|
|
|
| 6 |
|
| 7 |
router = APIRouter(prefix="/rerank", tags=["rag"])
|
| 8 |
|
| 9 |
@router.post("")
|
| 10 |
def rerank(req: RerankRequest):
|
| 11 |
-
|
| 12 |
-
model = OpenAIAdapter()
|
| 13 |
q = np.array(model.embed_text(req.query))
|
| 14 |
doc_embs = [np.array(model.embed_text(d)) for d in req.docs]
|
| 15 |
tc = TopologicalConsciousness(n_anyons=len(doc_embs), central_charge=627)
|
| 16 |
pc = tc.calculate_coherence(doc_embs)
|
| 17 |
alpha, beta, lamb = 1.0, 0.3, 0.2
|
| 18 |
scores = []
|
|
|
|
| 19 |
for e in doc_embs:
|
| 20 |
-
|
|
|
|
| 21 |
energy = tc.cardy_boundary_energy(e)
|
| 22 |
scores.append(alpha*sim + beta*pc - lamb*energy)
|
| 23 |
order = np.argsort(scores)[::-1].tolist()
|
| 24 |
-
return {"order": order, "scores": [float(s) for s in scores]}
|
|
|
|
| 3 |
import numpy as np
|
| 4 |
from consensus.topo import TopologicalConsciousness
|
| 5 |
from api.schemas import RerankRequest
|
| 6 |
+
from adapters.hf_sentence_tfm_adapter import SentenceTransformerAdapter
|
| 7 |
|
| 8 |
router = APIRouter(prefix="/rerank", tags=["rag"])
|
| 9 |
|
| 10 |
@router.post("")
|
| 11 |
def rerank(req: RerankRequest):
|
| 12 |
+
model = SentenceTransformerAdapter()
|
|
|
|
| 13 |
q = np.array(model.embed_text(req.query))
|
| 14 |
doc_embs = [np.array(model.embed_text(d)) for d in req.docs]
|
| 15 |
tc = TopologicalConsciousness(n_anyons=len(doc_embs), central_charge=627)
|
| 16 |
pc = tc.calculate_coherence(doc_embs)
|
| 17 |
alpha, beta, lamb = 1.0, 0.3, 0.2
|
| 18 |
scores = []
|
| 19 |
+
qn = q / (np.linalg.norm(q) + 1e-12)
|
| 20 |
for e in doc_embs:
|
| 21 |
+
en = e / (np.linalg.norm(e) + 1e-12)
|
| 22 |
+
sim = float(qn @ en)
|
| 23 |
energy = tc.cardy_boundary_energy(e)
|
| 24 |
scores.append(alpha*sim + beta*pc - lamb*energy)
|
| 25 |
order = np.argsort(scores)[::-1].tolist()
|
| 26 |
+
return {"order": order, "scores": [float(s) for s in scores], "coherence": pc}
|