File size: 1,606 Bytes
cc26282 f4296eb cc26282 58ad38e e731702 f4296eb e731702 f4296eb e731702 f4296eb 888c27e 03b7780 888c27e f4296eb 888c27e f4296eb aebdc67 f4296eb 888c27e f4296eb 888c27e | 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 | import os
import torch
from transformers import AutoTokenizer
from peft import AutoPeftModelForCausalLM
class EndpointHandler:
def __init__(self, model_dir):
# Load Hugging Face token from environment if needed
hf_token = os.getenv("HF_TOKEN")
# Load tokenizer and model from model_dir (adapter and base handled automatically)
self.tokenizer = AutoTokenizer.from_pretrained(model_dir, use_auth_token=hf_token)
# Set device (GPU if available, else CPU)
self.device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
# Load PEFT model and move to device
self.model = AutoPeftModelForCausalLM.from_pretrained(
model_dir,
use_auth_token=hf_token
).to(self.device)
self.model.eval()
def __call__(self, data):
# Extract input text and generation parameters
text = data.get("inputs", "")
gen_args = data.get("parameters", {
"max_new_tokens": 100,
"temperature": 0.7,
"do_sample": True
})
# Tokenize and move inputs to device
inputs = self.tokenizer(text, return_tensors="pt")
inputs = {k: v.to(self.device) for k, v in inputs.items()}
# Generate output without gradients
with torch.no_grad():
outputs = self.model.generate(**inputs, **gen_args)
# Decode and return generated text
response = self.tokenizer.decode(outputs[0], skip_special_tokens=True)
return {"generated_text": response}
|