sainikhiljuluri2015 commited on
Commit
6f3cfea
·
verified ·
1 Parent(s): 38dd9b6

Add handler.py for Inference Endpoints

Browse files
Files changed (1) hide show
  1. handler.py +52 -0
handler.py ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Dict, Any
2
+ import torch
3
+ from transformers import AutoModelForCausalLM, AutoTokenizer
4
+
5
+ class EndpointHandler:
6
+ def __init__(self, path: str = ""):
7
+ """Initialize model and tokenizer."""
8
+ self.tokenizer = AutoTokenizer.from_pretrained(path, trust_remote_code=True)
9
+ if self.tokenizer.pad_token is None:
10
+ self.tokenizer.pad_token = self.tokenizer.eos_token
11
+
12
+ self.model = AutoModelForCausalLM.from_pretrained(
13
+ path,
14
+ torch_dtype=torch.bfloat16,
15
+ device_map="auto",
16
+ trust_remote_code=True
17
+ )
18
+ self.model.eval()
19
+ self.device = next(self.model.parameters()).device
20
+ print(f"✅ Model loaded on {self.device}")
21
+
22
+ def __call__(self, data: Dict[str, Any]) -> Dict[str, Any]:
23
+ """Handle inference request."""
24
+ inputs = data.get("inputs", data.get("input", ""))
25
+ params = data.get("parameters", {})
26
+
27
+ # Tokenize
28
+ encoded = self.tokenizer(
29
+ inputs,
30
+ return_tensors="pt",
31
+ truncation=True,
32
+ max_length=2048
33
+ ).to(self.device)
34
+
35
+ # Generate
36
+ with torch.no_grad():
37
+ outputs = self.model.generate(
38
+ **encoded,
39
+ max_new_tokens=params.get("max_new_tokens", 256),
40
+ temperature=params.get("temperature", 0.7),
41
+ top_p=params.get("top_p", 0.9),
42
+ do_sample=params.get("do_sample", True),
43
+ repetition_penalty=params.get("repetition_penalty", 1.1),
44
+ pad_token_id=self.tokenizer.pad_token_id,
45
+ eos_token_id=self.tokenizer.eos_token_id,
46
+ )
47
+
48
+ # Decode (remove input tokens)
49
+ generated = outputs[0][encoded["input_ids"].shape[1]:]
50
+ text = self.tokenizer.decode(generated, skip_special_tokens=True)
51
+
52
+ return {"generated_text": text}