movienotes / app.py
eiramlan's picture
Create app.py
7a5d3a3 verified
Raw
History Blame Contribute Delete
944 Bytes
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]
@app.get("/")
def root():
return {"status": "ok", "endpoints": ["/rank"]}
@app.post("/rank", response_model=RankOut)
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]}