File size: 1,171 Bytes
5e46830
915f0e9
 
c369d6c
915f0e9
 
 
c369d6c
 
 
 
 
 
915f0e9
c369d6c
915f0e9
 
27f5d6e
 
5e46830
27f5d6e
 
 
915f0e9
27f5d6e
 
5e46830
915f0e9
c369d6c
27f5d6e
5e46830
c369d6c
 
 
 
 
 
 
 
 
 
 
5e46830
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
from sentence_transformers import CrossEncoder

app = FastAPI()

# Load the CrossEncoder model
model = CrossEncoder(
    "jinaai/jina-reranker-v2-base-multilingual",
    automodel_args={"torch_dtype": "auto"},
    trust_remote_code=True,
)

# Request and response models
class RerankRequest(BaseModel):
    query: str
    documents: List[str]

class RerankResult(BaseModel):
    corpus_id: int
    score: float
    text: str

class RerankResponse(BaseModel):
    query: str
    results: List[RerankResult]

# Rerank function using rank()
@app.post("/rerank", response_model=RerankResponse)
def rerank(req: RerankRequest):
    query = req.query
    documents = req.documents

    # Use model.rank() to get rankings based on the query and documents
    rankings = model.rank(query, documents, return_documents=True, convert_to_tensor=True)

    # Prepare the ranked results
    ranked = [
        {"corpus_id": ranking['corpus_id'], "score": float(ranking['score']), "text": ranking['text']}
        for ranking in rankings
    ]

    return RerankResponse(query=req.query, results=ranked)