|
from transformers import AutoTokenizer, PreTrainedTokenizerFast |
|
from transformers.tokenization_utils_base import AddedToken |
|
from http.server import HTTPServer, BaseHTTPRequestHandler |
|
import json |
|
import argparse |
|
|
|
|
|
class Tokenizer_Http(): |
|
|
|
def __init__(self): |
|
|
|
path = 'qwen2_5-vl-tokenizer' |
|
self.tokenizer = AutoTokenizer.from_pretrained(path, |
|
trust_remote_code=True, |
|
use_fast=False) |
|
|
|
def encode(self, content): |
|
text = [f'<|im_start|>system\nYou are a helpful assistant.<|im_end|>\n<|im_start|>user\n{content}<|im_end|>\n<|im_start|>assistant\n'] |
|
input_ids = self.tokenizer(text) |
|
return input_ids["input_ids"][0] |
|
|
|
def encode_vpm(self, content="描述一下这个视频的内容"): |
|
|
|
|
|
text = f"<|im_start|>system\nYou are a helpful assistant.<|im_end|>\n<|im_start|>user\n<|vision_start|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|video_pad|><|vision_end|>{content}<|im_end|>\n<|im_start|>assistant\n" |
|
|
|
|
|
|
|
|
|
output_kwargs = {'text_kwargs': {'padding': True, 'return_tensors': 'pt'}, 'images_kwargs': {'return_tensors': 'pt'}, 'audio_kwargs': {'padding': True, 'return_tensors': 'pt'}, 'videos_kwargs': {'return_tensors': 'pt'}, 'common_kwargs': {'return_tensors': 'pt'}} |
|
|
|
text_inputs = self.tokenizer(text, **output_kwargs["text_kwargs"]) |
|
return text_inputs["input_ids"].tolist()[0] |
|
|
|
def decode(self, token_ids): |
|
return self.tokenizer.decode(token_ids, |
|
clean_up_tokenization_spaces=False) |
|
|
|
@property |
|
def bos_id(self): |
|
return self.tokenizer.bos_token_id |
|
|
|
@property |
|
def eos_id(self): |
|
return self.tokenizer.eos_token_id |
|
|
|
@property |
|
def bos_token(self): |
|
return self.tokenizer.bos_token |
|
|
|
@property |
|
def eos_token(self): |
|
return self.tokenizer.eos_token |
|
|
|
|
|
tokenizer = Tokenizer_Http() |
|
|
|
print(tokenizer.bos_id, tokenizer.bos_token, tokenizer.eos_id, |
|
tokenizer.eos_token) |
|
token_ids = tokenizer.encode_vpm() |
|
|
|
|
|
|
|
|
|
|
|
|
|
print(token_ids) |
|
print(len(token_ids)) |
|
token_ids = tokenizer.encode("hello world") |
|
|
|
|
|
print(token_ids) |
|
print(len(token_ids)) |
|
|
|
|
|
class Request(BaseHTTPRequestHandler): |
|
|
|
timeout = 5 |
|
server_version = 'Apache' |
|
|
|
def do_GET(self): |
|
print(self.path) |
|
|
|
self.send_response(200) |
|
self.send_header("type", "get") |
|
self.end_headers() |
|
|
|
if self.path == '/bos_id': |
|
bos_id = tokenizer.bos_id |
|
|
|
|
|
if bos_id is None: |
|
msg = json.dumps({'bos_id': -1}) |
|
else: |
|
msg = json.dumps({'bos_id': bos_id}) |
|
elif self.path == '/eos_id': |
|
eos_id = tokenizer.eos_id |
|
if eos_id is None: |
|
msg = json.dumps({'eos_id': -1}) |
|
else: |
|
msg = json.dumps({'eos_id': eos_id}) |
|
else: |
|
msg = 'error' |
|
|
|
print(msg) |
|
msg = str(msg).encode() |
|
|
|
self.wfile.write(msg) |
|
|
|
def do_POST(self): |
|
|
|
data = self.rfile.read(int( |
|
self.headers['content-length'])) |
|
data = data.decode() |
|
|
|
self.send_response(200) |
|
self.send_header("type", "post") |
|
self.end_headers() |
|
|
|
if self.path == '/encode': |
|
req = json.loads(data) |
|
print(req) |
|
prompt = req['text'] |
|
b_img_prompt = False |
|
if 'img_prompt' in req: |
|
b_img_prompt = req['img_prompt'] |
|
if b_img_prompt: |
|
token_ids = tokenizer.encode_vpm(prompt) |
|
else: |
|
token_ids = tokenizer.encode(prompt) |
|
|
|
if token_ids is None: |
|
msg = json.dumps({'token_ids': -1}) |
|
else: |
|
msg = json.dumps({'token_ids': token_ids}) |
|
|
|
elif self.path == '/decode': |
|
req = json.loads(data) |
|
token_ids = req['token_ids'] |
|
text = tokenizer.decode(token_ids) |
|
if text is None: |
|
msg = json.dumps({'text': ""}) |
|
else: |
|
msg = json.dumps({'text': text}) |
|
else: |
|
msg = 'error' |
|
print(msg) |
|
msg = str(msg).encode() |
|
|
|
self.wfile.write(msg) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
args = argparse.ArgumentParser() |
|
args.add_argument('--host', type=str, default='localhost') |
|
args.add_argument('--port', type=int, default=8080) |
|
args = args.parse_args() |
|
|
|
host = (args.host, args.port) |
|
print('http://%s:%s' % host) |
|
server = HTTPServer(host, Request) |
|
server.serve_forever() |
|
|