@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / b03b1b97f6
Fork 0

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 + ]