File size: 1,347 Bytes
a38b4f9
 
 
 
 
 
 
6693f3f
ea8995e
6693f3f
 
 
 
 
ea8995e
 
 
a38b4f9
 
 
 
 
2854ab0
a38b4f9
 
 
 
 
 
 
 
 
 
 
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
# app/api/v1/metrics.py
from fastapi import APIRouter, HTTPException, Query, Depends, Request
from typing import List
from sklearn.metrics import accuracy_score
from nltk.translate.bleu_score import sentence_bleu
from sentence_transformers import SentenceTransformer, util
from app.auth.auth import verify_token
import os
os.environ["HF_HOME"] = "/tmp/huggingface"
os.environ["TRANSFORMERS_CACHE"] = "/tmp/hf_cache"
os.environ["HF_HUB_CACHE"] = "/tmp/hf_cache"

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("clip-ViT-B-32")  
# OR multilingual version
# model = SentenceTransformer("sentence-transformers/clip-ViT-B-32-multilingual-v1")32")

router = APIRouter()

@router.post("/evaluate/bleu", dependencies=[Depends(verify_token)])
def compute_bleu(reference: str, candidate: str):
    print("Metrics router loaded!")
    ref_tokens = [reference.split()]
    cand_tokens = candidate.split()
    score = sentence_bleu(ref_tokens, cand_tokens)
    return {"metric": "BLEU", "score": score}

@router.post("/evaluate/clipscore")
def compute_clip_score(reference: str, candidate: str):
    ref_emb = model.encode(reference, convert_to_tensor=True)
    cand_emb = model.encode(candidate, convert_to_tensor=True)
    score = util.cos_sim(ref_emb, cand_emb).item()
    return {"metric": "CLIPScore", "score": score}