| import os |
| import torch |
| from transformers import AutoTokenizer |
| from peft import AutoPeftModelForCausalLM |
|
|
| class EndpointHandler: |
| def __init__(self, model_dir): |
| |
| hf_token = os.getenv("HF_TOKEN") |
| |
| |
| self.tokenizer = AutoTokenizer.from_pretrained(model_dir, use_auth_token=hf_token) |
| |
| |
| self.device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') |
| |
| |
| self.model = AutoPeftModelForCausalLM.from_pretrained( |
| model_dir, |
| use_auth_token=hf_token |
| ).to(self.device) |
| self.model.eval() |
|
|
| def __call__(self, data): |
| |
| text = data.get("inputs", "") |
| gen_args = data.get("parameters", { |
| "max_new_tokens": 100, |
| "temperature": 0.7, |
| "do_sample": True |
| }) |
| |
| |
| inputs = self.tokenizer(text, return_tensors="pt") |
| inputs = {k: v.to(self.device) for k, v in inputs.items()} |
| |
| |
| with torch.no_grad(): |
| outputs = self.model.generate(**inputs, **gen_args) |
| |
| |
| response = self.tokenizer.decode(outputs[0], skip_special_tokens=True) |
| return {"generated_text": response} |