Infraizoo commited on
Commit
0cd6415
·
verified ·
1 Parent(s): 999af48

Create handler.py

Browse files
Files changed (1) hide show
  1. handler.py +50 -0
handler.py ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers import AutoTokenizer, AutoModelForVision2Seq
2
+ import torch, os
3
+ from jinja2 import Template
4
+ from typing import Any, Dict, List
5
+
6
+ class EndpointHandler:
7
+ def __init__(self, model_dir: str = "", **kwargs: Any):
8
+ # Load tokenizer
9
+ self.tokenizer = AutoTokenizer.from_pretrained(model_dir, use_fast=True, trust_remote_code=True)
10
+
11
+ # Load model with trust_remote_code to handle custom Qwen classes
12
+ self.model = AutoModelForVision2Seq.from_pretrained(
13
+ model_dir,
14
+ torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
15
+ device_map="auto",
16
+ trust_remote_code=True,
17
+ )
18
+ self.model.eval()
19
+
20
+ # Load chat template
21
+ template_path = os.path.join(model_dir, "chat_template.jinja")
22
+ with open(template_path, "r", encoding="utf-8") as f:
23
+ self.template = Template(f.read())
24
+
25
+ def _render_prompt(self, messages: List[Dict[str, Any]], tools=None):
26
+ return self.template.render(
27
+ messages=messages,
28
+ tools=tools or [],
29
+ add_generation_prompt=True,
30
+ add_vision_id=False,
31
+ )
32
+
33
+ def __call__(self, data: Dict[str, Any]) -> Dict[str, Any]:
34
+ messages = data.get("messages", [])
35
+ tools = data.get("tools", None)
36
+ prompt = self._render_prompt(messages, tools)
37
+
38
+ inputs = self.tokenizer(prompt, return_tensors="pt").to(self.model.device)
39
+
40
+ gen_kwargs = {
41
+ "max_new_tokens": data.get("max_new_tokens", 256),
42
+ "temperature": data.get("temperature", 0.7),
43
+ "top_p": data.get("top_p", 0.9),
44
+ }
45
+
46
+ with torch.no_grad():
47
+ output = self.model.generate(**inputs, **gen_kwargs)
48
+
49
+ text = self.tokenizer.decode(output[0], skip_special_tokens=True)
50
+ return {"generated_text": text}