main
py 70 lines 2.05 KB
Raw
1 # SPDX-License-Identifier: Apache-2.0
2 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3 # Adapted from https://huggingface.co/boltuix/NeuroBERT-NER
4
5 """Example online usage of Pooling API for Named Entity Recognition (NER).
6
7 Run `vllm serve <model> --runner pooling`
8 to start up the server in vLLM. e.g.
9
10 vllm serve boltuix/NeuroBERT-NER
11 """
12
13 import argparse
14
15 import requests
16 import torch
17
18
19 def post_http_request(prompt: dict, api_url: str) -> requests.Response:
20 headers = {"User-Agent": "Test Client"}
21 response = requests.post(api_url, headers=headers, json=prompt)
22 return response
23
24
25 def parse_args():
26 parser = argparse.ArgumentParser()
27 parser.add_argument("--host", type=str, default="localhost")
28 parser.add_argument("--port", type=int, default=8000)
29 parser.add_argument("--model", type=str, default="boltuix/NeuroBERT-NER")
30
31 return parser.parse_args()
32
33
34 def main(args):
35 from transformers import AutoConfig, AutoTokenizer
36
37 api_url = f"http://{args.host}:{args.port}/pooling"
38 model_name = args.model
39
40 # Load tokenizer and config
41 tokenizer = AutoTokenizer.from_pretrained(model_name)
42 config = AutoConfig.from_pretrained(model_name)
43 label_map = config.id2label
44
45 # Input text
46 text = "Barack Obama visited Microsoft headquarters in Seattle on January 2025."
47 prompt = {"model": model_name, "input": text}
48
49 pooling_response = post_http_request(prompt=prompt, api_url=api_url)
50
51 # Run inference
52 output = pooling_response.json()["data"][0]
53 logits = torch.tensor(output["data"])
54 predictions = logits.argmax(dim=-1)
55 inputs = tokenizer(text, return_tensors="pt")
56
57 # Map predictions to labels
58 tokens = tokenizer.convert_ids_to_tokens(inputs["input_ids"][0])
59 labels = [label_map[p.item()] for p in predictions]
60 assert len(tokens) == len(predictions)
61
62 # Print results
63 for token, label in zip(tokens, labels):
64 if token not in tokenizer.all_special_tokens:
65 print(f"{token:15} → {label}")
66
67
68 if __name__ == "__main__":
69 args = parse_args()
70 main(args)