min-samis2 commited on
Commit
cf062ee
·
verified ·
1 Parent(s): bf9b0df

Add HF Inference Endpoints custom handler

Browse files

Auto-generated by Lovable so this LoRA adapter can be served as a custom-handler endpoint.

Files changed (2) hide show
  1. handler.py +38 -0
  2. requirements.txt +6 -0
handler.py ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Any, Dict
2
+ import torch
3
+ from transformers import AutoModelForCausalLM, AutoTokenizer
4
+ from peft import PeftConfig, PeftModel
5
+
6
+
7
+ class EndpointHandler:
8
+ def __init__(self, path: str = ""):
9
+ cfg = PeftConfig.from_pretrained(path)
10
+ base = cfg.base_model_name_or_path
11
+ self.tokenizer = AutoTokenizer.from_pretrained(base)
12
+ if self.tokenizer.pad_token_id is None:
13
+ self.tokenizer.pad_token_id = self.tokenizer.eos_token_id
14
+ model = AutoModelForCausalLM.from_pretrained(
15
+ base,
16
+ torch_dtype=torch.float16,
17
+ device_map="auto",
18
+ )
19
+ self.model = PeftModel.from_pretrained(model, path)
20
+ self.model.eval()
21
+
22
+ def __call__(self, data: Dict[str, Any]):
23
+ inputs = data.get("inputs", "")
24
+ params = data.get("parameters", {}) or {}
25
+ enc = self.tokenizer(inputs, return_tensors="pt").to(self.model.device)
26
+ with torch.no_grad():
27
+ out = self.model.generate(
28
+ **enc,
29
+ max_new_tokens=int(params.get("max_new_tokens", 256)),
30
+ temperature=float(params.get("temperature", 0.7)),
31
+ top_p=float(params.get("top_p", 0.9)),
32
+ do_sample=bool(params.get("do_sample", True)),
33
+ pad_token_id=self.tokenizer.pad_token_id,
34
+ )
35
+ text = self.tokenizer.decode(
36
+ out[0][enc["input_ids"].shape[1]:], skip_special_tokens=True
37
+ )
38
+ return [{"generated_text": text}]
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ transformers>=4.40.0
2
+ peft>=0.10.0
3
+ accelerate>=0.30.0
4
+ safetensors>=0.4.0
5
+ sentencepiece>=0.2.0
6
+ bitsandbytes>=0.43.0