A high-throughput and memory-efficient inference and serving engine for LLMs
Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git
Synced Nov 14, 05:30 UTC
Support LongCat-Flash-Chat tool call (#24083)
Signed-off-by: 许文卿 <xwq391974@alibaba-inc.com>
Xu Wenqing committed
Sep 26, 2025 at 17:25 UTC
b03b1b97f6fc460c7b80f856361ae681d9574ce9
3 files changed
+50
docs/features/tool_calling.md
+9
@@ -310,6 +310,15 @@ Flags:
310
* For non-reasoning: `--tool-call-parser hunyuan_a13b`
311
* For reasoning: `--tool-call-parser hunyuan_a13b --reasoning-parser hunyuan_a13b --enable_reasoning`
312
313
+### LongCat-Flash-Chat Models (`longcat`)
314
+
315
+Supported models:
316
+
317
+* `meituan-longcat/LongCat-Flash-Chat`
318
+* `meituan-longcat/LongCat-Flash-Chat-FP8`
319
+
320
+Flags: `--tool-call-parser longcat`
321
+
322
### GLM-4.5 Models (`glm45`)
323
324
Supported models:
vllm/entrypoints/openai/tool_parsers/__init__.py
+2
@@ -14,6 +14,7 @@ from .jamba_tool_parser import JambaToolParser
14
from .kimi_k2_tool_parser import KimiK2ToolParser
15
from .llama4_pythonic_tool_parser import Llama4PythonicToolParser
16
from .llama_tool_parser import Llama3JsonToolParser
17
+from .longcat_tool_parser import LongcatFlashToolParser
18
from .minimax_tool_parser import MinimaxToolParser
19
from .mistral_tool_parser import MistralToolParser
20
from .openai_tool_parser import OpenAIToolParser
@@ -36,6 +37,7 @@ __all__ = [
37
"Llama3JsonToolParser",
38
"JambaToolParser",
39
"Llama4PythonicToolParser",
40
+ "LongcatFlashToolParser",
41
"PythonicToolParser",
42
"Phi4MiniJsonToolParser",
43
"DeepSeekV3ToolParser",
vllm/entrypoints/openai/tool_parsers/longcat_tool_parser.py
new
+39
@@ -0,0 +1,39 @@
1
+# SPDX-License-Identifier: Apache-2.0
2
+# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3
+
4
+import regex as re
5
+
6
+from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
7
+ ToolParserManager)
8
+from vllm.entrypoints.openai.tool_parsers.hermes_tool_parser import (
9
+ Hermes2ProToolParser)
10
+from vllm.transformers_utils.tokenizer import AnyTokenizer
11
+
12
+
13
+@ToolParserManager.register_module("longcat")
14
+class LongcatFlashToolParser(Hermes2ProToolParser):
15
+
16
+ def __init__(self, tokenizer: AnyTokenizer):
17
+ super().__init__(tokenizer)
18
+
19
+ self.tool_call_start_token: str = "<longcat_tool_call>"
20
+ self.tool_call_end_token: str = "</longcat_tool_call>"
21
+
22
+ self.tool_call_regex = re.compile(
23
+ r"<longcat_tool_call>(.*?)</longcat_tool_call>|<longcat_tool_call>(.*)",
24
+ re.DOTALL)
25
+
26
+ self.tool_call_start_token_ids = self.model_tokenizer.encode(
27
+ self.tool_call_start_token, add_special_tokens=False)
28
+ self.tool_call_end_token_ids = self.model_tokenizer.encode(
29
+ self.tool_call_end_token, add_special_tokens=False)
30
+
31
+ self.tool_call_start_token_array = [
32
+ self.model_tokenizer.decode([token_id])
33
+ for token_id in self.tool_call_start_token_ids
34
+ ]
35
+
36
+ self.tool_call_end_token_array = [
37
+ self.model_tokenizer.decode([token_id])
38
+ for token_id in self.tool_call_end_token_ids
39
+ ]