brocks1234's picture
Create handler.py
95c104f verified
raw
history blame
1.13 kB
from typing import Any, Dict, List
from transformers import AutoTokenizer, AutoModel
import torch
class EndpointHandler:
def __init__(self, path=""):
# We point directly to the original weights
self.model_id = "zhihan1996/DNABERT-2-117M"
self.tokenizer = AutoTokenizer.from_pretrained(self.model_id, trust_remote_code=True)
self.model = AutoModel.from_pretrained(self.model_id, trust_remote_code=True)
if torch.cuda.is_available():
self.model = self.model.to("cuda")
def __call__(self, data: Dict[str, Any]) -> List[float]:
inputs = data.pop("inputs", data)
# DNA Tokenization
encoded_input = self.tokenizer(inputs, return_tensors='pt')
if torch.cuda.is_available():
encoded_input = {k: v.to("cuda") for k, v in encoded_input.items()}
with torch.no_grad():
outputs = self.model(**encoded_input)
# Returns a 768-dimensional vector representing the DNA sequence
embeddings = outputs[0][0].mean(dim=0).cpu().numpy().tolist()
return embeddings