Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI | |
| from pydantic import BaseModel | |
| from sentence_transformers import SentenceTransformer, util | |
| app = FastAPI(title="MovieNotes Ranker (HF Space)") | |
| # Small, fast embedding model | |
| model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2") | |
| class RankIn(BaseModel): | |
| q: str | |
| catalogue: list[str] | |
| limit: int = 5 | |
| class RankOut(BaseModel): | |
| indices: list[int] | |
| scores: list[float] | |
| def root(): | |
| return {"status": "ok", "endpoints": ["/rank"]} | |
| def rank(req: RankIn): | |
| q = req.q or "" | |
| k = max(1, min(req.limit, 10)) | |
| q_emb = model.encode(q, normalize_embeddings=True) | |
| cat_emb = model.encode(req.catalogue, normalize_embeddings=True) | |
| scores = util.cos_sim(q_emb, cat_emb).tolist()[0] | |
| order = sorted(range(len(scores)), key=lambda i: -scores[i])[:k] | |
| return {"indices": order, "scores": [scores[i] for i in order]} | |