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 11, 11:15 UTC
[Refactor] [2/N] Move tool parsers into the vLLM main directory (#30675)
Signed-off-by: chaunceyjiang <chaunceyjiang@gmail.com>
Chauncey committed
Dec 15, 2025 at 20:54 UTC
2a1776b7ac4fae7c50c694edeafc1b14270e4350
61 files changed
+288
-257
docs/features/tool_calling.md
+2
-2
@@ -420,7 +420,7 @@ Flags: `--tool-call-parser pythonic --chat-template {see_above}`
420
421
## How to Write a Tool Parser Plugin
422
423
-A tool parser plugin is a Python file containing one or more ToolParser implementations. You can write a ToolParser similar to the `Hermes2ProToolParser` in [vllm/entrypoints/openai/tool_parsers/hermes_tool_parser.py](../../vllm/entrypoints/openai/tool_parsers/hermes_tool_parser.py).
423
+A tool parser plugin is a Python file containing one or more ToolParser implementations. You can write a ToolParser similar to the `Hermes2ProToolParser` in [vllm/tool_parsers/hermes_tool_parser.py](../../vllm/tool_parsers/hermes_tool_parser.py).
424
425
Here is a summary of a plugin file:
426
@@ -468,7 +468,7 @@ Here is a summary of a plugin file:
468
# register the tool parser to ToolParserManager
469
ToolParserManager.register_lazy_module(
470
name="example",
471
- module_path="vllm.entrypoints.openai.tool_parsers.example",
471
+ module_path="vllm.tool_parsers.example",
472
class_name="ExampleToolParser",
473
)
474
tests/entrypoints/openai/test_serving_chat.py
+1
-1
@@ -19,9 +19,9 @@ from vllm.entrypoints.openai.protocol import (
19
)
20
from vllm.entrypoints.openai.serving_chat import OpenAIServingChat
21
from vllm.entrypoints.openai.serving_models import BaseModelPath, OpenAIServingModels
22
-from vllm.entrypoints.openai.tool_parsers import ToolParserManager
22
from vllm.outputs import CompletionOutput, RequestOutput
23
from vllm.tokenizers import get_tokenizer
24
+from vllm.tool_parsers import ToolParserManager
25
from vllm.v1.engine.async_llm import AsyncLLM
26
27
from ...utils import RemoteOpenAIServer
tests/entrypoints/openai/tool_parsers/test_gigachat3_tool_parser.py
+1
-1
@@ -10,8 +10,8 @@ from tests.entrypoints.openai.tool_parsers.utils import (
10
run_tool_extraction_streaming,
11
)
12
from vllm.entrypoints.openai.protocol import FunctionCall
13
-from vllm.entrypoints.openai.tool_parsers import ToolParser, ToolParserManager
13
from vllm.tokenizers import TokenizerLike
14
+from vllm.tool_parsers import ToolParser, ToolParserManager
15
16
SIMPLE_ARGS_DICT = {
17
"action": "create",
tests/entrypoints/openai/tool_parsers/test_hermes_tool_parser.py
+1
-1
@@ -6,8 +6,8 @@ import json
6
import pytest
7
8
from vllm.entrypoints.openai.protocol import ChatCompletionRequest
9
-from vllm.entrypoints.openai.tool_parsers.hermes_tool_parser import Hermes2ProToolParser
9
from vllm.tokenizers import TokenizerLike
10
+from vllm.tool_parsers.hermes_tool_parser import Hermes2ProToolParser
11
12
from ....utils import RemoteOpenAIServer
13
tests/entrypoints/openai/tool_parsers/test_hunyuan_a13b_tool_parser.py
+1
-1
@@ -12,7 +12,7 @@ from tests.entrypoints.openai.tool_parsers.utils import (
12
run_tool_extraction_streaming,
13
)
14
from vllm.entrypoints.openai.protocol import FunctionCall, ToolCall
15
-from vllm.entrypoints.openai.tool_parsers import ToolParser, ToolParserManager
15
+from vllm.tool_parsers import ToolParser, ToolParserManager
16
17
18
def make_tool_call(name, arguments):
tests/entrypoints/openai/tool_parsers/test_llama3_json_tool_parser.py
+1
-1
@@ -6,8 +6,8 @@ from unittest.mock import MagicMock, patch
6
import pytest
7
8
from vllm.entrypoints.openai.protocol import ExtractedToolCallInformation
9
-from vllm.entrypoints.openai.tool_parsers.llama_tool_parser import Llama3JsonToolParser
9
from vllm.tokenizers import TokenizerLike
10
+from vllm.tool_parsers.llama_tool_parser import Llama3JsonToolParser
11
12
13
@pytest.fixture
tests/entrypoints/openai/tool_parsers/test_llama4_pythonic_tool_parser.py
+1
-1
@@ -10,8 +10,8 @@ from tests.entrypoints.openai.tool_parsers.utils import (
10
run_tool_extraction_streaming,
11
)
12
from vllm.entrypoints.openai.protocol import FunctionCall
13
-from vllm.entrypoints.openai.tool_parsers import ToolParser, ToolParserManager
13
from vllm.tokenizers import TokenizerLike
14
+from vllm.tool_parsers import ToolParser, ToolParserManager
15
16
# Test cases similar to pythonic parser but with Llama4 specific format
17
SIMPLE_FUNCTION_OUTPUT = "[get_weather(city='LA', metric='C')]"
tests/entrypoints/openai/tool_parsers/test_olmo3_tool_parser.py
+1
-1
@@ -10,8 +10,8 @@ from tests.entrypoints.openai.tool_parsers.utils import (
10
run_tool_extraction_streaming,
11
)
12
from vllm.entrypoints.openai.protocol import FunctionCall
13
-from vllm.entrypoints.openai.tool_parsers import ToolParser, ToolParserManager
13
from vllm.tokenizers import TokenizerLike
14
+from vllm.tool_parsers import ToolParser, ToolParserManager
15
16
# https://github.com/meta-llama/llama-models/blob/main/models/llama3_2/text_prompt_format.md#model-response-format-1
17
SIMPLE_FUNCTION_OUTPUT = "get_weather(city='San Francisco', metric='celsius')"
tests/entrypoints/openai/tool_parsers/test_pythonic_tool_parser.py
+1
-1
@@ -10,8 +10,8 @@ from tests.entrypoints.openai.tool_parsers.utils import (
10
run_tool_extraction_streaming,
11
)
12
from vllm.entrypoints.openai.protocol import FunctionCall
13
-from vllm.entrypoints.openai.tool_parsers import ToolParser, ToolParserManager
13
from vllm.tokenizers import TokenizerLike
14
+from vllm.tool_parsers import ToolParser, ToolParserManager
15
16
# https://github.com/meta-llama/llama-models/blob/main/models/llama3_2/text_prompt_format.md#model-response-format-1
17
SIMPLE_FUNCTION_OUTPUT = "get_weather(city='San Francisco', metric='celsius')"
tests/entrypoints/openai/tool_parsers/utils.py
+1
-1
@@ -10,8 +10,8 @@ from vllm.entrypoints.openai.protocol import (
10
FunctionCall,
11
ToolCall,
12
)
13
-from vllm.entrypoints.openai.tool_parsers import ToolParser
13
from vllm.tokenizers import TokenizerLike
14
+from vllm.tool_parsers import ToolParser
15
16
17
class StreamingToolReconstructor:
tests/models/language/generation/test_mistral.py
+3
-3
@@ -5,12 +5,12 @@ import json
5
6
import pytest
7
8
-from vllm.entrypoints.openai.tool_parsers.mistral_tool_parser import (
8
+from vllm.sampling_params import SamplingParams
9
+from vllm.tokenizers.mistral import MistralTokenizer
10
+from vllm.tool_parsers.mistral_tool_parser import (
11
MistralToolCall,
12
MistralToolParser,
13
)
12
-from vllm.sampling_params import SamplingParams
13
-from vllm.tokenizers.mistral import MistralTokenizer
14
15
from ...utils import check_logprobs_close
16
tests/tool_use/test_deepseekv31_tool_parser.py
+2
-2
@@ -3,10 +3,10 @@
3
4
import pytest
5
6
-from vllm.entrypoints.openai.tool_parsers.deepseekv31_tool_parser import (
6
+from vllm.tokenizers import get_tokenizer
7
+from vllm.tool_parsers.deepseekv31_tool_parser import (
8
DeepSeekV31ToolParser,
9
)
9
-from vllm.tokenizers import get_tokenizer
10
11
MODEL = "deepseek-ai/DeepSeek-V3.1"
12
tests/tool_use/test_ernie45_moe_tool_parser.py
+1
-1
@@ -13,9 +13,9 @@ from vllm.entrypoints.openai.protocol import (
13
FunctionCall,
14
ToolCall,
15
)
16
-from vllm.entrypoints.openai.tool_parsers.ernie45_tool_parser import Ernie45ToolParser
16
from vllm.tokenizers import TokenizerLike, get_tokenizer
17
from vllm.tokenizers.detokenizer_utils import detokenize_incrementally
18
+from vllm.tool_parsers.ernie45_tool_parser import Ernie45ToolParser
19
20
# Use a common model that is likely to be available
21
MODEL = "baidu/ERNIE-4.5-21B-A3B-Thinking"
tests/tool_use/test_glm4_moe_tool_parser.py
+2
-2
@@ -7,10 +7,10 @@ import json
7
import pytest
8
9
from vllm.entrypoints.openai.protocol import FunctionCall, ToolCall
10
-from vllm.entrypoints.openai.tool_parsers.glm4_moe_tool_parser import (
10
+from vllm.tokenizers import get_tokenizer
11
+from vllm.tool_parsers.glm4_moe_tool_parser import (
12
Glm4MoeModelToolParser,
13
)
13
-from vllm.tokenizers import get_tokenizer
14
15
pytestmark = pytest.mark.cpu_test
16
tests/tool_use/test_jamba_tool_parser.py
+1
-1
@@ -9,9 +9,9 @@ import pytest
9
from partial_json_parser.core.options import Allow
10
11
from vllm.entrypoints.openai.protocol import DeltaMessage, FunctionCall, ToolCall
12
-from vllm.entrypoints.openai.tool_parsers.jamba_tool_parser import JambaToolParser
12
from vllm.tokenizers import TokenizerLike, get_tokenizer
13
from vllm.tokenizers.detokenizer_utils import detokenize_incrementally
14
+from vllm.tool_parsers.jamba_tool_parser import JambaToolParser
15
16
pytestmark = pytest.mark.cpu_test
17
tests/tool_use/test_kimi_k2_tool_parser.py
+1
-1
@@ -7,8 +7,8 @@ import json
7
import pytest
8
9
from vllm.entrypoints.openai.protocol import FunctionCall, ToolCall
10
-from vllm.entrypoints.openai.tool_parsers.kimi_k2_tool_parser import KimiK2ToolParser
10
from vllm.tokenizers import get_tokenizer
11
+from vllm.tool_parsers.kimi_k2_tool_parser import KimiK2ToolParser
12
13
pytestmark = pytest.mark.cpu_test
14
tests/tool_use/test_minimax_tool_parser.py
+1
-1
@@ -12,8 +12,8 @@ from vllm.entrypoints.openai.protocol import (
12
FunctionCall,
13
ToolCall,
14
)
15
-from vllm.entrypoints.openai.tool_parsers.minimax_tool_parser import MinimaxToolParser
15
from vllm.tokenizers import get_tokenizer
16
+from vllm.tool_parsers.minimax_tool_parser import MinimaxToolParser
17
18
pytestmark = pytest.mark.cpu_test
19
tests/tool_use/test_mistral_tool_parser.py
+1
-1
@@ -12,10 +12,10 @@ from mistral_common.protocol.instruct.tool_calls import FunctionCall, ToolCall
12
from partial_json_parser.core.options import Allow
13
14
from vllm.entrypoints.openai.protocol import DeltaMessage, DeltaToolCall
15
-from vllm.entrypoints.openai.tool_parsers.mistral_tool_parser import MistralToolParser
15
from vllm.tokenizers import TokenizerLike, get_tokenizer
16
from vllm.tokenizers.detokenizer_utils import detokenize_incrementally
17
from vllm.tokenizers.mistral import MistralTokenizer
18
+from vllm.tool_parsers.mistral_tool_parser import MistralToolParser
19
20
21
@pytest.fixture(scope="module")
tests/tool_use/test_openai_tool_parser.py
+1
-1
@@ -15,8 +15,8 @@ from openai_harmony import (
15
)
16
17
from vllm.entrypoints.openai.protocol import FunctionCall, ToolCall
18
-from vllm.entrypoints.openai.tool_parsers.openai_tool_parser import OpenAIToolParser
18
from vllm.tokenizers import get_tokenizer
19
+from vllm.tool_parsers.openai_tool_parser import OpenAIToolParser
20
21
MODEL = "gpt2"
22
tests/tool_use/test_qwen3coder_tool_parser.py
+4
-4
@@ -13,12 +13,12 @@ from vllm.entrypoints.openai.protocol import (
13
FunctionCall,
14
ToolCall,
15
)
16
-from vllm.entrypoints.openai.tool_parsers.qwen3coder_tool_parser import (
17
- Qwen3CoderToolParser,
18
-)
19
-from vllm.entrypoints.openai.tool_parsers.qwen3xml_tool_parser import Qwen3XMLToolParser
16
from vllm.tokenizers import TokenizerLike, get_tokenizer
17
from vllm.tokenizers.detokenizer_utils import detokenize_incrementally
18
+from vllm.tool_parsers.qwen3coder_tool_parser import (
19
+ Qwen3CoderToolParser,
20
+)
21
+from vllm.tool_parsers.qwen3xml_tool_parser import Qwen3XMLToolParser
22
23
pytestmark = pytest.mark.cpu_test
24
tests/tool_use/test_seed_oss_tool_parser.py
+1
-1
@@ -14,9 +14,9 @@ from vllm.entrypoints.openai.protocol import (
14
FunctionCall,
15
ToolCall,
16
)
17
-from vllm.entrypoints.openai.tool_parsers.seed_oss_tool_parser import SeedOssToolParser
17
from vllm.tokenizers import TokenizerLike, get_tokenizer
18
from vllm.tokenizers.detokenizer_utils import detokenize_incrementally
19
+from vllm.tool_parsers.seed_oss_tool_parser import SeedOssToolParser
20
21
pytestmark = pytest.mark.cpu_test
22
tests/tool_use/test_tool_choice_required.py
+1
-1
@@ -12,7 +12,7 @@ from vllm.entrypoints.openai.protocol import (
12
ChatCompletionToolsParam,
13
)
14
from vllm.entrypoints.openai.serving_chat import OpenAIServingChat
15
-from vllm.entrypoints.openai.tool_parsers.utils import get_json_schema_from_tools
15
+from vllm.tool_parsers.utils import get_json_schema_from_tools
16
17
pytestmark = pytest.mark.cpu_test
18
tests/tool_use/test_xlam_tool_parser.py
+1
-1
@@ -12,9 +12,9 @@ from vllm.entrypoints.openai.protocol import (
12
FunctionCall,
13
ToolCall,
14
)
15
-from vllm.entrypoints.openai.tool_parsers.xlam_tool_parser import xLAMToolParser
15
from vllm.tokenizers import TokenizerLike, get_tokenizer
16
from vllm.tokenizers.detokenizer_utils import detokenize_incrementally
17
+from vllm.tool_parsers.xlam_tool_parser import xLAMToolParser
18
19
pytestmark = pytest.mark.cpu_test
20
vllm/entrypoints/context.py
+1
-1
@@ -34,13 +34,13 @@ from vllm.entrypoints.openai.protocol import (
34
ResponseRawMessageAndToken,
35
ResponsesRequest,
36
)
37
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import ToolParser
37
from vllm.entrypoints.responses_utils import construct_tool_dicts
38
from vllm.entrypoints.tool import Tool
39
from vllm.entrypoints.tool_server import ToolServer
40
from vllm.outputs import RequestOutput
41
from vllm.reasoning.abs_reasoning_parsers import ReasoningParser
42
from vllm.tokenizers.protocol import TokenizerLike
43
+from vllm.tool_parsers.abstract_tool_parser import ToolParser
44
from vllm.transformers_utils.tokenizer import AnyTokenizer
45
from vllm.utils import random_uuid
46
vllm/entrypoints/openai/api_server.py
+1
-1
@@ -72,7 +72,6 @@ from vllm.entrypoints.openai.serving_transcription import (
72
OpenAIServingTranscription,
73
OpenAIServingTranslation,
74
)
75
-from vllm.entrypoints.openai.tool_parsers import ToolParserManager
75
from vllm.entrypoints.openai.utils import validate_json_request
76
from vllm.entrypoints.pooling.classify.serving import ServingClassification
77
from vllm.entrypoints.pooling.embed.serving import OpenAIServingEmbedding
@@ -95,6 +94,7 @@ from vllm.entrypoints.utils import (
94
from vllm.logger import init_logger
95
from vllm.reasoning import ReasoningParserManager
96
from vllm.tasks import POOLING_TASKS
97
+from vllm.tool_parsers import ToolParserManager
98
from vllm.usage.usage_lib import UsageContext
99
from vllm.utils.argparse_utils import FlexibleArgumentParser
100
from vllm.utils.gc_utils import freeze_gc_heap
vllm/entrypoints/openai/cli_args.py
+1
-1
@@ -27,8 +27,8 @@ from vllm.entrypoints.constants import (
27
H11_MAX_INCOMPLETE_EVENT_SIZE_DEFAULT,
28
)
29
from vllm.entrypoints.openai.serving_models import LoRAModulePath
30
-from vllm.entrypoints.openai.tool_parsers import ToolParserManager
30
from vllm.logger import init_logger
31
+from vllm.tool_parsers import ToolParserManager
32
from vllm.utils.argparse_utils import FlexibleArgumentParser
33
34
logger = init_logger(__name__)
vllm/entrypoints/openai/parser/responses_parser.py
+1
-1
@@ -12,10 +12,10 @@ from openai.types.responses.response_reasoning_item import (
12
)
13
14
from vllm.entrypoints.openai.protocol import ResponseInputOutputItem, ResponsesRequest
15
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import ToolParser
15
from vllm.outputs import CompletionOutput
16
from vllm.reasoning.abs_reasoning_parsers import ReasoningParser
17
from vllm.tokenizers.protocol import TokenizerLike
18
+from vllm.tool_parsers.abstract_tool_parser import ToolParser
19
from vllm.transformers_utils.tokenizer import AnyTokenizer
20
from vllm.utils import random_uuid
21
vllm/entrypoints/openai/serving_chat.py
+2
-2
@@ -57,8 +57,6 @@ from vllm.entrypoints.openai.serving_engine import (
57
clamp_prompt_logprobs,
58
)
59
from vllm.entrypoints.openai.serving_models import OpenAIServingModels
60
-from vllm.entrypoints.openai.tool_parsers import ToolParser
61
-from vllm.entrypoints.openai.tool_parsers.mistral_tool_parser import MistralToolCall
60
from vllm.entrypoints.openai.utils import maybe_filter_parallel_tool_calls
61
from vllm.entrypoints.utils import get_max_tokens, should_include_usage
62
from vllm.inputs.data import TokensPrompt
@@ -73,6 +71,8 @@ from vllm.tokenizers.mistral import (
71
truncate_tool_call_ids,
72
validate_request_params,
73
)
74
+from vllm.tool_parsers import ToolParser
75
+from vllm.tool_parsers.mistral_tool_parser import MistralToolCall
76
from vllm.utils.collection_utils import as_list
77
from vllm.v1.sample.logits_processor import validate_logits_processors_parameters
78
vllm/entrypoints/openai/serving_engine.py
+1
-1
@@ -59,7 +59,6 @@ from vllm.entrypoints.openai.protocol import (
59
TranslationRequest,
60
)
61
from vllm.entrypoints.openai.serving_models import OpenAIServingModels
62
-from vllm.entrypoints.openai.tool_parsers import ToolParser, ToolParserManager
62
from vllm.entrypoints.pooling.classify.protocol import (
63
ClassificationChatRequest,
64
ClassificationCompletionRequest,
@@ -104,6 +103,7 @@ from vllm.sampling_params import BeamSearchParams, SamplingParams
103
from vllm.tokenizers import TokenizerLike
104
from vllm.tokenizers.deepseek_v32 import DeepseekV32Tokenizer
105
from vllm.tokenizers.mistral import MistralTokenizer
106
+from vllm.tool_parsers import ToolParser, ToolParserManager
107
from vllm.tracing import (
108
contains_trace_headers,
109
extract_trace_headers,
vllm/entrypoints/openai/tool_parsers/__init__.py
+23
-140
@@ -1,150 +1,33 @@
1
# SPDX-License-Identifier: Apache-2.0
2
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3
4
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
5
- ToolParser,
6
- ToolParserManager,
7
-)
4
+import warnings
5
9
-__all__ = ["ToolParser", "ToolParserManager"]
6
7
+def __getattr__(name: str):
8
+ if name == "ToolParser":
9
+ from vllm.tool_parsers import ToolParser
10
12
-"""
13
-Register a lazy module mapping.
11
+ warnings.warn(
12
+ "`vllm.entrypoints.openai.tool_parsers.ToolParser` has been moved to "
13
+ "`vllm.tool_parsers.ToolParser`. "
14
+ "The old name will be removed in v0.14.",
15
+ DeprecationWarning,
16
+ stacklevel=2,
17
+ )
18
15
-Example:
16
- ToolParserManager.register_lazy_module(
17
- name="kimi_k2",
18
- module_path="vllm.entrypoints.openai.tool_parsers.kimi_k2_parser",
19
- class_name="KimiK2ToolParser",
20
- )
21
-"""
19
+ return ToolParser
20
+ if name == "ToolParserManager":
21
+ from vllm.tool_parsers import ToolParserManager
22
23
+ warnings.warn(
24
+ "`vllm.entrypoints.openai.tool_parsers.ToolParserManager` "
25
+ "has been moved to `vllm.tool_parsers.ToolParserManager`. "
26
+ "The old name will be removed in v0.14.",
27
+ DeprecationWarning,
28
+ stacklevel=2,
29
+ )
30
24
-_TOOL_PARSERS_TO_REGISTER = {
25
- "deepseek_v3": ( # name
26
- "deepseekv3_tool_parser", # filename
27
- "DeepSeekV3ToolParser", # class_name
28
- ),
29
- "deepseek_v31": (
30
- "deepseekv31_tool_parser",
31
- "DeepSeekV31ToolParser",
32
- ),
33
- "deepseek_v32": (
34
- "deepseekv32_tool_parser",
35
- "DeepSeekV32ToolParser",
36
- ),
37
- "ernie45": (
38
- "ernie45_tool_parser",
39
- "Ernie45ToolParser",
40
- ),
41
- "glm45": (
42
- "glm4_moe_tool_parser",
43
- "Glm4MoeModelToolParser",
44
- ),
45
- "granite-20b-fc": (
46
- "granite_20b_fc_tool_parser",
47
- "Granite20bFCToolParser",
48
- ),
49
- "granite": (
50
- "granite_tool_parser",
51
- "GraniteToolParser",
52
- ),
53
- "hermes": (
54
- "hermes_tool_parser",
55
- "Hermes2ProToolParser",
56
- ),
57
- "hunyuan_a13b": (
58
- "hunyuan_a13b_tool_parser",
59
- "HunyuanA13BToolParser",
60
- ),
61
- "internlm": (
62
- "internlm2_tool_parser",
63
- "Internlm2ToolParser",
64
- ),
65
- "jamba": (
66
- "jamba_tool_parser",
67
- "JambaToolParser",
68
- ),
69
- "kimi_k2": (
70
- "kimi_k2_tool_parser",
71
- "KimiK2ToolParser",
72
- ),
73
- "llama3_json": (
74
- "llama_tool_parser",
75
- "Llama3JsonToolParser",
76
- ),
77
- "llama4_json": (
78
- "llama_tool_parser",
79
- "Llama3JsonToolParser",
80
- ),
81
- "llama4_pythonic": (
82
- "llama4_pythonic_tool_parser",
83
- "Llama4PythonicToolParser",
84
- ),
85
- "longcat": (
86
- "longcat_tool_parser",
87
- "LongcatFlashToolParser",
88
- ),
89
- "minimax_m2": (
90
- "minimax_m2_tool_parser",
91
- "MinimaxM2ToolParser",
92
- ),
93
- "minimax": (
94
- "minimax_tool_parser",
95
- "MinimaxToolParser",
96
- ),
97
- "mistral": (
98
- "mistral_tool_parser",
99
- "MistralToolParser",
100
- ),
101
- "olmo3": (
102
- "olmo3_tool_parser",
103
- "Olmo3PythonicToolParser",
104
- ),
105
- "openai": (
106
- "openai_tool_parser",
107
- "OpenAIToolParser",
108
- ),
109
- "phi4_mini_json": (
110
- "phi4mini_tool_parser",
111
- "Phi4MiniJsonToolParser",
112
- ),
113
- "pythonic": (
114
- "pythonic_tool_parser",
115
- "PythonicToolParser",
116
- ),
117
- "qwen3_coder": (
118
- "qwen3coder_tool_parser",
119
- "Qwen3CoderToolParser",
120
- ),
121
- "qwen3_xml": (
122
- "qwen3xml_tool_parser",
123
- "Qwen3XMLToolParser",
124
- ),
125
- "seed_oss": (
126
- "seed_oss_tool_parser",
127
- "SeedOssToolParser",
128
- ),
129
- "step3": (
130
- "step3_tool_parser",
131
- "Step3ToolParser",
132
- ),
133
- "xlam": (
134
- "xlam_tool_parser",
135
- "xLAMToolParser",
136
- ),
137
- "gigachat3": (
138
- "gigachat3_tool_parser",
139
- "GigaChat3ToolParser",
140
- ),
141
-}
31
+ return ToolParserManager
32
143
-
144
-def register_lazy_tool_parsers():
145
- for name, (file_name, class_name) in _TOOL_PARSERS_TO_REGISTER.items():
146
- module_path = f"vllm.entrypoints.openai.tool_parsers.{file_name}"
147
- ToolParserManager.register_lazy_module(name, module_path, class_name)
148
-
149
-
150
-register_lazy_tool_parsers()
33
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
vllm/tool_parsers/__init__.py
new
+150
@@ -0,0 +1,150 @@
1
+# SPDX-License-Identifier: Apache-2.0
2
+# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3
+
4
+from vllm.tool_parsers.abstract_tool_parser import (
5
+ ToolParser,
6
+ ToolParserManager,
7
+)
8
+
9
+__all__ = ["ToolParser", "ToolParserManager"]
10
+
11
+
12
+"""
13
+Register a lazy module mapping.
14
+
15
+Example:
16
+ ToolParserManager.register_lazy_module(
17
+ name="kimi_k2",
18
+ module_path="vllm.tool_parsers.kimi_k2_parser",
19
+ class_name="KimiK2ToolParser",
20
+ )
21
+"""
22
+
23
+
24
+_TOOL_PARSERS_TO_REGISTER = {
25
+ "deepseek_v3": ( # name
26
+ "deepseekv3_tool_parser", # filename
27
+ "DeepSeekV3ToolParser", # class_name
28
+ ),
29
+ "deepseek_v31": (
30
+ "deepseekv31_tool_parser",
31
+ "DeepSeekV31ToolParser",
32
+ ),
33
+ "deepseek_v32": (
34
+ "deepseekv32_tool_parser",
35
+ "DeepSeekV32ToolParser",
36
+ ),
37
+ "ernie45": (
38
+ "ernie45_tool_parser",
39
+ "Ernie45ToolParser",
40
+ ),
41
+ "glm45": (
42
+ "glm4_moe_tool_parser",
43
+ "Glm4MoeModelToolParser",
44
+ ),
45
+ "granite-20b-fc": (
46
+ "granite_20b_fc_tool_parser",
47
+ "Granite20bFCToolParser",
48
+ ),
49
+ "granite": (
50
+ "granite_tool_parser",
51
+ "GraniteToolParser",
52
+ ),
53
+ "hermes": (
54
+ "hermes_tool_parser",
55
+ "Hermes2ProToolParser",
56
+ ),
57
+ "hunyuan_a13b": (
58
+ "hunyuan_a13b_tool_parser",
59
+ "HunyuanA13BToolParser",
60
+ ),
61
+ "internlm": (
62
+ "internlm2_tool_parser",
63
+ "Internlm2ToolParser",
64
+ ),
65
+ "jamba": (
66
+ "jamba_tool_parser",
67
+ "JambaToolParser",
68
+ ),
69
+ "kimi_k2": (
70
+ "kimi_k2_tool_parser",
71
+ "KimiK2ToolParser",
72
+ ),
73
+ "llama3_json": (
74
+ "llama_tool_parser",
75
+ "Llama3JsonToolParser",
76
+ ),
77
+ "llama4_json": (
78
+ "llama_tool_parser",
79
+ "Llama3JsonToolParser",
80
+ ),
81
+ "llama4_pythonic": (
82
+ "llama4_pythonic_tool_parser",
83
+ "Llama4PythonicToolParser",
84
+ ),
85
+ "longcat": (
86
+ "longcat_tool_parser",
87
+ "LongcatFlashToolParser",
88
+ ),
89
+ "minimax_m2": (
90
+ "minimax_m2_tool_parser",
91
+ "MinimaxM2ToolParser",
92
+ ),
93
+ "minimax": (
94
+ "minimax_tool_parser",
95
+ "MinimaxToolParser",
96
+ ),
97
+ "mistral": (
98
+ "mistral_tool_parser",
99
+ "MistralToolParser",
100
+ ),
101
+ "olmo3": (
102
+ "olmo3_tool_parser",
103
+ "Olmo3PythonicToolParser",
104
+ ),
105
+ "openai": (
106
+ "openai_tool_parser",
107
+ "OpenAIToolParser",
108
+ ),
109
+ "phi4_mini_json": (
110
+ "phi4mini_tool_parser",
111
+ "Phi4MiniJsonToolParser",
112
+ ),
113
+ "pythonic": (
114
+ "pythonic_tool_parser",
115
+ "PythonicToolParser",
116
+ ),
117
+ "qwen3_coder": (
118
+ "qwen3coder_tool_parser",
119
+ "Qwen3CoderToolParser",
120
+ ),
121
+ "qwen3_xml": (
122
+ "qwen3xml_tool_parser",
123
+ "Qwen3XMLToolParser",
124
+ ),
125
+ "seed_oss": (
126
+ "seed_oss_tool_parser",
127
+ "SeedOssToolParser",
128
+ ),
129
+ "step3": (
130
+ "step3_tool_parser",
131
+ "Step3ToolParser",
132
+ ),
133
+ "xlam": (
134
+ "xlam_tool_parser",
135
+ "xLAMToolParser",
136
+ ),
137
+ "gigachat3": (
138
+ "gigachat3_tool_parser",
139
+ "GigaChat3ToolParser",
140
+ ),
141
+}
142
+
143
+
144
+def register_lazy_tool_parsers():
145
+ for name, (file_name, class_name) in _TOOL_PARSERS_TO_REGISTER.items():
146
+ module_path = f"vllm.tool_parsers.{file_name}"
147
+ ToolParserManager.register_lazy_module(name, module_path, class_name)
148
+
149
+
150
+register_lazy_tool_parsers()
vllm/tool_parsers/abstract_tool_parser.py
renamed
+2
-2
@@ -17,12 +17,12 @@ from vllm.entrypoints.openai.protocol import (
17
ResponsesRequest,
18
ResponseTextConfig,
19
)
20
-from vllm.entrypoints.openai.tool_parsers.utils import get_json_schema_from_tools
20
from vllm.logger import init_logger
21
from vllm.sampling_params import (
22
StructuredOutputsParams,
23
)
24
from vllm.tokenizers import TokenizerLike
25
+from vllm.tool_parsers.utils import get_json_schema_from_tools
26
from vllm.utils.collection_utils import is_list_of
27
from vllm.utils.import_utils import import_from_path
28
@@ -203,7 +203,7 @@ class ToolParserManager:
203
Example:
204
ToolParserManager.register_lazy_module(
205
name="kimi_k2",
206
- module_path="vllm.entrypoints.openai.tool_parsers.kimi_k2_parser",
206
+ module_path="vllm.tool_parsers.kimi_k2_parser",
207
class_name="KimiK2ToolParser",
208
)
209
"""
vllm/tool_parsers/deepseekv31_tool_parser.py
renamed
+1
-3
@@ -15,11 +15,9 @@ from vllm.entrypoints.openai.protocol import (
15
FunctionCall,
16
ToolCall,
17
)
18
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
19
- ToolParser,
20
-)
18
from vllm.logger import init_logger
19
from vllm.tokenizers import TokenizerLike
20
+from vllm.tool_parsers.abstract_tool_parser import ToolParser
21
22
logger = init_logger(__name__)
23
vllm/tool_parsers/deepseekv32_tool_parser.py
renamed
+3
-3
@@ -17,11 +17,11 @@ from vllm.entrypoints.openai.protocol import (
17
FunctionCall,
18
ToolCall,
19
)
20
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
21
- ToolParser,
22
-)
20
from vllm.logger import init_logger
21
from vllm.tokenizers import TokenizerLike
22
+from vllm.tool_parsers.abstract_tool_parser import (
23
+ ToolParser,
24
+)
25
26
logger = init_logger(__name__)
27
vllm/tool_parsers/deepseekv3_tool_parser.py
renamed
+3
-3
@@ -15,11 +15,11 @@ from vllm.entrypoints.openai.protocol import (
15
FunctionCall,
16
ToolCall,
17
)
18
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
19
- ToolParser,
20
-)
18
from vllm.logger import init_logger
19
from vllm.tokenizers import TokenizerLike
20
+from vllm.tool_parsers.abstract_tool_parser import (
21
+ ToolParser,
22
+)
23
24
logger = init_logger(__name__)
25
vllm/tool_parsers/ernie45_tool_parser.py
renamed
+3
-3
@@ -15,11 +15,11 @@ from vllm.entrypoints.openai.protocol import (
15
FunctionCall,
16
ToolCall,
17
)
18
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
19
- ToolParser,
20
-)
18
from vllm.logger import init_logger
19
from vllm.tokenizers import TokenizerLike
20
+from vllm.tool_parsers.abstract_tool_parser import (
21
+ ToolParser,
22
+)
23
24
logger = init_logger(__name__)
25
vllm/tool_parsers/gigachat3_tool_parser.py
renamed
+1
-1
@@ -16,9 +16,9 @@ from vllm.entrypoints.openai.protocol import (
16
FunctionCall,
17
ToolCall,
18
)
19
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import ToolParser
19
from vllm.logger import init_logger
20
from vllm.tokenizers import TokenizerLike
21
+from vllm.tool_parsers.abstract_tool_parser import ToolParser
22
23
logger = init_logger(__name__)
24
vllm/tool_parsers/glm4_moe_tool_parser.py
renamed
+3
-3
@@ -18,11 +18,11 @@ from vllm.entrypoints.openai.protocol import (
18
FunctionCall,
19
ToolCall,
20
)
21
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
22
- ToolParser,
23
-)
21
from vllm.logger import init_logger
22
from vllm.tokenizers import TokenizerLike
23
+from vllm.tool_parsers.abstract_tool_parser import (
24
+ ToolParser,
25
+)
26
27
logger = init_logger(__name__)
28
vllm/tool_parsers/granite_20b_fc_tool_parser.py
renamed
+4
-4
@@ -19,17 +19,17 @@ from vllm.entrypoints.openai.protocol import (
19
FunctionCall,
20
ToolCall,
21
)
22
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
22
+from vllm.logger import init_logger
23
+from vllm.tokenizers import TokenizerLike
24
+from vllm.tool_parsers.abstract_tool_parser import (
25
ToolParser,
26
)
25
-from vllm.entrypoints.openai.tool_parsers.utils import (
27
+from vllm.tool_parsers.utils import (
28
consume_space,
29
find_common_prefix,
30
is_complete_json,
31
partial_json_loads,
32
)
31
-from vllm.logger import init_logger
32
-from vllm.tokenizers import TokenizerLike
33
34
logger = init_logger(__name__)
35
vllm/tool_parsers/granite_tool_parser.py
renamed
+4
-4
@@ -17,17 +17,17 @@ from vllm.entrypoints.openai.protocol import (
17
FunctionCall,
18
ToolCall,
19
)
20
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
20
+from vllm.logger import init_logger
21
+from vllm.tokenizers import TokenizerLike
22
+from vllm.tool_parsers.abstract_tool_parser import (
23
ToolParser,
24
)
23
-from vllm.entrypoints.openai.tool_parsers.utils import (
25
+from vllm.tool_parsers.utils import (
26
consume_space,
27
find_common_prefix,
28
is_complete_json,
29
partial_json_loads,
30
)
29
-from vllm.logger import init_logger
30
-from vllm.tokenizers import TokenizerLike
31
32
logger = init_logger(__name__)
33
vllm/tool_parsers/hermes_tool_parser.py
renamed
+3
-3
@@ -18,12 +18,12 @@ from vllm.entrypoints.openai.protocol import (
18
FunctionCall,
19
ToolCall,
20
)
21
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
22
- ToolParser,
23
-)
21
from vllm.logger import init_logger
22
from vllm.tokenizers import TokenizerLike
23
from vllm.tokenizers.mistral import MistralTokenizer
24
+from vllm.tool_parsers.abstract_tool_parser import (
25
+ ToolParser,
26
+)
27
28
logger = init_logger(__name__)
29
vllm/tool_parsers/hunyuan_a13b_tool_parser.py
renamed
+4
-4
@@ -17,12 +17,12 @@ from vllm.entrypoints.openai.protocol import (
17
FunctionCall,
18
ToolCall,
19
)
20
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
21
- ToolParser,
22
-)
23
-from vllm.entrypoints.openai.tool_parsers.utils import consume_space
20
from vllm.logger import init_logger
21
from vllm.tokenizers import TokenizerLike
22
+from vllm.tool_parsers.abstract_tool_parser import (
23
+ ToolParser,
24
+)
25
+from vllm.tool_parsers.utils import consume_space
26
from vllm.utils import random_uuid
27
28
logger = init_logger(__name__)
vllm/tool_parsers/internlm2_tool_parser.py
renamed
+4
-4
@@ -17,12 +17,12 @@ from vllm.entrypoints.openai.protocol import (
17
FunctionCall,
18
ToolCall,
19
)
20
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
21
- ToolParser,
22
-)
23
-from vllm.entrypoints.openai.tool_parsers.utils import extract_intermediate_diff
20
from vllm.logger import init_logger
21
from vllm.tokenizers import TokenizerLike
22
+from vllm.tool_parsers.abstract_tool_parser import (
23
+ ToolParser,
24
+)
25
+from vllm.tool_parsers.utils import extract_intermediate_diff
26
27
logger = init_logger(__name__)
28
vllm/tool_parsers/jamba_tool_parser.py
renamed
+2
-2
@@ -18,11 +18,11 @@ from vllm.entrypoints.openai.protocol import (
18
FunctionCall,
19
ToolCall,
20
)
21
-from vllm.entrypoints.openai.tool_parsers import ToolParser
22
-from vllm.entrypoints.openai.tool_parsers.utils import extract_intermediate_diff
21
from vllm.logger import init_logger
22
from vllm.tokenizers import TokenizerLike
23
from vllm.tokenizers.mistral import MistralTokenizer
24
+from vllm.tool_parsers import ToolParser
25
+from vllm.tool_parsers.utils import extract_intermediate_diff
26
27
logger = init_logger(__name__)
28
vllm/tool_parsers/kimi_k2_tool_parser.py
renamed
+3
-3
@@ -15,11 +15,11 @@ from vllm.entrypoints.openai.protocol import (
15
FunctionCall,
16
ToolCall,
17
)
18
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
19
- ToolParser,
20
-)
18
from vllm.logger import init_logger
19
from vllm.tokenizers import TokenizerLike
20
+from vllm.tool_parsers.abstract_tool_parser import (
21
+ ToolParser,
22
+)
23
24
logger = init_logger(__name__)
25
vllm/tool_parsers/llama4_pythonic_tool_parser.py
renamed
+2
-2
@@ -18,10 +18,10 @@ from vllm.entrypoints.openai.protocol import (
18
FunctionCall,
19
ToolCall,
20
)
21
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
21
+from vllm.logger import init_logger
22
+from vllm.tool_parsers.abstract_tool_parser import (
23
ToolParser,
24
)
24
-from vllm.logger import init_logger
25
26
logger = init_logger(__name__)
27
vllm/tool_parsers/llama_tool_parser.py
renamed
+3
-3
@@ -20,15 +20,15 @@ from vllm.entrypoints.openai.protocol import (
20
FunctionCall,
21
ToolCall,
22
)
23
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
23
+from vllm.logger import init_logger
24
+from vllm.tool_parsers.abstract_tool_parser import (
25
ToolParser,
26
)
26
-from vllm.entrypoints.openai.tool_parsers.utils import (
27
+from vllm.tool_parsers.utils import (
28
find_common_prefix,
29
is_complete_json,
30
partial_json_loads,
31
)
31
-from vllm.logger import init_logger
32
33
logger = init_logger(__name__)
34
vllm/tool_parsers/longcat_tool_parser.py
renamed
+1
-1
@@ -3,8 +3,8 @@
3
4
import regex as re
5
6
-from vllm.entrypoints.openai.tool_parsers.hermes_tool_parser import Hermes2ProToolParser
6
from vllm.tokenizers import TokenizerLike
7
+from vllm.tool_parsers.hermes_tool_parser import Hermes2ProToolParser
8
9
10
class LongcatFlashToolParser(Hermes2ProToolParser):
vllm/tool_parsers/minimax_m2_tool_parser.py
renamed
+3
-3
@@ -17,11 +17,11 @@ from vllm.entrypoints.openai.protocol import (
17
FunctionCall,
18
ToolCall,
19
)
20
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
21
- ToolParser,
22
-)
20
from vllm.logger import init_logger
21
from vllm.tokenizers import TokenizerLike
22
+from vllm.tool_parsers.abstract_tool_parser import (
23
+ ToolParser,
24
+)
25
26
logger = init_logger(__name__)
27
vllm/tool_parsers/minimax_tool_parser.py
renamed
+4
-4
@@ -17,12 +17,12 @@ from vllm.entrypoints.openai.protocol import (
17
FunctionCall,
18
ToolCall,
19
)
20
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
21
- ToolParser,
22
-)
23
-from vllm.entrypoints.openai.tool_parsers.utils import extract_intermediate_diff
20
from vllm.logger import init_logger
21
from vllm.tokenizers import TokenizerLike
22
+from vllm.tool_parsers.abstract_tool_parser import (
23
+ ToolParser,
24
+)
25
+from vllm.tool_parsers.utils import extract_intermediate_diff
26
27
logger = init_logger(__name__)
28
vllm/tool_parsers/mistral_tool_parser.py
renamed
+3
-3
@@ -21,12 +21,12 @@ from vllm.entrypoints.openai.protocol import (
21
FunctionCall,
22
ToolCall,
23
)
24
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
25
- ToolParser,
26
-)
24
from vllm.logger import init_logger
25
from vllm.tokenizers import TokenizerLike
26
from vllm.tokenizers.mistral import MistralTokenizer
27
+from vllm.tool_parsers.abstract_tool_parser import (
28
+ ToolParser,
29
+)
30
31
logger = init_logger(__name__)
32
vllm/tool_parsers/olmo3_tool_parser.py
renamed
+2
-2
@@ -18,10 +18,10 @@ from vllm.entrypoints.openai.protocol import (
18
FunctionCall,
19
ToolCall,
20
)
21
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
21
+from vllm.logger import init_logger
22
+from vllm.tool_parsers.abstract_tool_parser import (
23
ToolParser,
24
)
24
-from vllm.logger import init_logger
25
26
logger = init_logger(__name__)
27
vllm/tool_parsers/openai_tool_parser.py
renamed
+2
-2
@@ -12,10 +12,10 @@ from vllm.entrypoints.openai.protocol import (
12
FunctionCall,
13
ToolCall,
14
)
15
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
15
+from vllm.logger import init_logger
16
+from vllm.tool_parsers.abstract_tool_parser import (
17
ToolParser,
18
)
18
-from vllm.logger import init_logger
19
20
if TYPE_CHECKING:
21
from vllm.tokenizers import TokenizerLike
vllm/tool_parsers/phi4mini_tool_parser.py
renamed
+2
-2
@@ -16,10 +16,10 @@ from vllm.entrypoints.openai.protocol import (
16
FunctionCall,
17
ToolCall,
18
)
19
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
19
+from vllm.logger import init_logger
20
+from vllm.tool_parsers.abstract_tool_parser import (
21
ToolParser,
22
)
22
-from vllm.logger import init_logger
23
24
logger = init_logger(__name__)
25
vllm/tool_parsers/pythonic_tool_parser.py
renamed
+2
-2
@@ -19,10 +19,10 @@ from vllm.entrypoints.openai.protocol import (
19
FunctionCall,
20
ToolCall,
21
)
22
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
22
+from vllm.logger import init_logger
23
+from vllm.tool_parsers.abstract_tool_parser import (
24
ToolParser,
25
)
25
-from vllm.logger import init_logger
26
27
logger = init_logger(__name__)
28
vllm/tool_parsers/qwen3coder_tool_parser.py
renamed
+3
-3
@@ -18,11 +18,11 @@ from vllm.entrypoints.openai.protocol import (
18
FunctionCall,
19
ToolCall,
20
)
21
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
22
- ToolParser,
23
-)
21
from vllm.logger import init_logger
22
from vllm.tokenizers import TokenizerLike
23
+from vllm.tool_parsers.abstract_tool_parser import (
24
+ ToolParser,
25
+)
26
27
logger = init_logger(__name__)
28
vllm/tool_parsers/qwen3xml_tool_parser.py
renamed
+3
-3
@@ -19,11 +19,11 @@ from vllm.entrypoints.openai.protocol import (
19
FunctionCall,
20
ToolCall,
21
)
22
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
23
- ToolParser,
24
-)
22
from vllm.logger import init_logger
23
from vllm.tokenizers import TokenizerLike
24
+from vllm.tool_parsers.abstract_tool_parser import (
25
+ ToolParser,
26
+)
27
28
logger = init_logger(__name__)
29
vllm/tool_parsers/seed_oss_tool_parser.py
renamed
+3
-3
@@ -21,11 +21,11 @@ from vllm.entrypoints.openai.protocol import (
21
FunctionCall,
22
ToolCall,
23
)
24
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
25
- ToolParser,
26
-)
24
from vllm.logger import init_logger
25
from vllm.tokenizers import TokenizerLike
26
+from vllm.tool_parsers.abstract_tool_parser import (
27
+ ToolParser,
28
+)
29
30
logger = init_logger(__name__)
31
vllm/tool_parsers/step3_tool_parser.py
renamed
+3
-3
@@ -17,11 +17,11 @@ from vllm.entrypoints.openai.protocol import (
17
FunctionCall,
18
ToolCall,
19
)
20
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
21
- ToolParser,
22
-)
20
from vllm.logger import init_logger
21
from vllm.tokenizers import TokenizerLike
22
+from vllm.tool_parsers.abstract_tool_parser import (
23
+ ToolParser,
24
+)
25
from vllm.utils import random_uuid
26
27
logger = init_logger(__name__)
vllm/tool_parsers/utils.py
renamed
vllm/tool_parsers/xlam_tool_parser.py
renamed
+1
-1
@@ -17,7 +17,7 @@ from vllm.entrypoints.openai.protocol import (
17
FunctionCall,
18
ToolCall,
19
)
20
-from vllm.entrypoints.openai.tool_parsers.abstract_tool_parser import (
20
+from vllm.tool_parsers.abstract_tool_parser import (
21
ToolParser,
22
)
23
from vllm.logger import init_logger