Unverified Commit 2a1776b7 authored by Chauncey's avatar Chauncey Committed by GitHub
Browse files

[Refactor] [2/N] Move tool parsers into the vLLM main directory (#30675)


Signed-off-by: default avatarchaunceyjiang <chaunceyjiang@gmail.com>
parent 185c22bf
...@@ -420,7 +420,7 @@ Flags: `--tool-call-parser pythonic --chat-template {see_above}` ...@@ -420,7 +420,7 @@ Flags: `--tool-call-parser pythonic --chat-template {see_above}`
## How to Write a Tool Parser Plugin ## How to Write a Tool Parser Plugin
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). 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).
Here is a summary of a plugin file: Here is a summary of a plugin file:
...@@ -468,7 +468,7 @@ Here is a summary of a plugin file: ...@@ -468,7 +468,7 @@ Here is a summary of a plugin file:
# register the tool parser to ToolParserManager # register the tool parser to ToolParserManager
ToolParserManager.register_lazy_module( ToolParserManager.register_lazy_module(
name="example", name="example",
module_path="vllm.entrypoints.openai.tool_parsers.example", module_path="vllm.tool_parsers.example",
class_name="ExampleToolParser", class_name="ExampleToolParser",
) )
......
...@@ -19,9 +19,9 @@ from vllm.entrypoints.openai.protocol import ( ...@@ -19,9 +19,9 @@ from vllm.entrypoints.openai.protocol import (
) )
from vllm.entrypoints.openai.serving_chat import OpenAIServingChat from vllm.entrypoints.openai.serving_chat import OpenAIServingChat
from vllm.entrypoints.openai.serving_models import BaseModelPath, OpenAIServingModels from vllm.entrypoints.openai.serving_models import BaseModelPath, OpenAIServingModels
from vllm.entrypoints.openai.tool_parsers import ToolParserManager
from vllm.outputs import CompletionOutput, RequestOutput from vllm.outputs import CompletionOutput, RequestOutput
from vllm.tokenizers import get_tokenizer from vllm.tokenizers import get_tokenizer
from vllm.tool_parsers import ToolParserManager
from vllm.v1.engine.async_llm import AsyncLLM from vllm.v1.engine.async_llm import AsyncLLM
from ...utils import RemoteOpenAIServer from ...utils import RemoteOpenAIServer
......
...@@ -10,8 +10,8 @@ from tests.entrypoints.openai.tool_parsers.utils import ( ...@@ -10,8 +10,8 @@ from tests.entrypoints.openai.tool_parsers.utils import (
run_tool_extraction_streaming, run_tool_extraction_streaming,
) )
from vllm.entrypoints.openai.protocol import FunctionCall from vllm.entrypoints.openai.protocol import FunctionCall
from vllm.entrypoints.openai.tool_parsers import ToolParser, ToolParserManager
from vllm.tokenizers import TokenizerLike from vllm.tokenizers import TokenizerLike
from vllm.tool_parsers import ToolParser, ToolParserManager
SIMPLE_ARGS_DICT = { SIMPLE_ARGS_DICT = {
"action": "create", "action": "create",
......
...@@ -6,8 +6,8 @@ import json ...@@ -6,8 +6,8 @@ import json
import pytest import pytest
from vllm.entrypoints.openai.protocol import ChatCompletionRequest from vllm.entrypoints.openai.protocol import ChatCompletionRequest
from vllm.entrypoints.openai.tool_parsers.hermes_tool_parser import Hermes2ProToolParser
from vllm.tokenizers import TokenizerLike from vllm.tokenizers import TokenizerLike
from vllm.tool_parsers.hermes_tool_parser import Hermes2ProToolParser
from ....utils import RemoteOpenAIServer from ....utils import RemoteOpenAIServer
......
...@@ -12,7 +12,7 @@ from tests.entrypoints.openai.tool_parsers.utils import ( ...@@ -12,7 +12,7 @@ from tests.entrypoints.openai.tool_parsers.utils import (
run_tool_extraction_streaming, run_tool_extraction_streaming,
) )
from vllm.entrypoints.openai.protocol import FunctionCall, ToolCall from vllm.entrypoints.openai.protocol import FunctionCall, ToolCall
from vllm.entrypoints.openai.tool_parsers import ToolParser, ToolParserManager from vllm.tool_parsers import ToolParser, ToolParserManager
def make_tool_call(name, arguments): def make_tool_call(name, arguments):
......
...@@ -6,8 +6,8 @@ from unittest.mock import MagicMock, patch ...@@ -6,8 +6,8 @@ from unittest.mock import MagicMock, patch
import pytest import pytest
from vllm.entrypoints.openai.protocol import ExtractedToolCallInformation from vllm.entrypoints.openai.protocol import ExtractedToolCallInformation
from vllm.entrypoints.openai.tool_parsers.llama_tool_parser import Llama3JsonToolParser
from vllm.tokenizers import TokenizerLike from vllm.tokenizers import TokenizerLike
from vllm.tool_parsers.llama_tool_parser import Llama3JsonToolParser
@pytest.fixture @pytest.fixture
......
...@@ -10,8 +10,8 @@ from tests.entrypoints.openai.tool_parsers.utils import ( ...@@ -10,8 +10,8 @@ from tests.entrypoints.openai.tool_parsers.utils import (
run_tool_extraction_streaming, run_tool_extraction_streaming,
) )
from vllm.entrypoints.openai.protocol import FunctionCall from vllm.entrypoints.openai.protocol import FunctionCall
from vllm.entrypoints.openai.tool_parsers import ToolParser, ToolParserManager
from vllm.tokenizers import TokenizerLike from vllm.tokenizers import TokenizerLike
from vllm.tool_parsers import ToolParser, ToolParserManager
# Test cases similar to pythonic parser but with Llama4 specific format # Test cases similar to pythonic parser but with Llama4 specific format
SIMPLE_FUNCTION_OUTPUT = "[get_weather(city='LA', metric='C')]" SIMPLE_FUNCTION_OUTPUT = "[get_weather(city='LA', metric='C')]"
......
...@@ -10,8 +10,8 @@ from tests.entrypoints.openai.tool_parsers.utils import ( ...@@ -10,8 +10,8 @@ from tests.entrypoints.openai.tool_parsers.utils import (
run_tool_extraction_streaming, run_tool_extraction_streaming,
) )
from vllm.entrypoints.openai.protocol import FunctionCall from vllm.entrypoints.openai.protocol import FunctionCall
from vllm.entrypoints.openai.tool_parsers import ToolParser, ToolParserManager
from vllm.tokenizers import TokenizerLike from vllm.tokenizers import TokenizerLike
from vllm.tool_parsers import ToolParser, ToolParserManager
# https://github.com/meta-llama/llama-models/blob/main/models/llama3_2/text_prompt_format.md#model-response-format-1 # https://github.com/meta-llama/llama-models/blob/main/models/llama3_2/text_prompt_format.md#model-response-format-1
SIMPLE_FUNCTION_OUTPUT = "get_weather(city='San Francisco', metric='celsius')" SIMPLE_FUNCTION_OUTPUT = "get_weather(city='San Francisco', metric='celsius')"
......
...@@ -10,8 +10,8 @@ from tests.entrypoints.openai.tool_parsers.utils import ( ...@@ -10,8 +10,8 @@ from tests.entrypoints.openai.tool_parsers.utils import (
run_tool_extraction_streaming, run_tool_extraction_streaming,
) )
from vllm.entrypoints.openai.protocol import FunctionCall from vllm.entrypoints.openai.protocol import FunctionCall
from vllm.entrypoints.openai.tool_parsers import ToolParser, ToolParserManager
from vllm.tokenizers import TokenizerLike from vllm.tokenizers import TokenizerLike
from vllm.tool_parsers import ToolParser, ToolParserManager
# https://github.com/meta-llama/llama-models/blob/main/models/llama3_2/text_prompt_format.md#model-response-format-1 # https://github.com/meta-llama/llama-models/blob/main/models/llama3_2/text_prompt_format.md#model-response-format-1
SIMPLE_FUNCTION_OUTPUT = "get_weather(city='San Francisco', metric='celsius')" SIMPLE_FUNCTION_OUTPUT = "get_weather(city='San Francisco', metric='celsius')"
......
...@@ -10,8 +10,8 @@ from vllm.entrypoints.openai.protocol import ( ...@@ -10,8 +10,8 @@ from vllm.entrypoints.openai.protocol import (
FunctionCall, FunctionCall,
ToolCall, ToolCall,
) )
from vllm.entrypoints.openai.tool_parsers import ToolParser
from vllm.tokenizers import TokenizerLike from vllm.tokenizers import TokenizerLike
from vllm.tool_parsers import ToolParser
class StreamingToolReconstructor: class StreamingToolReconstructor:
......
...@@ -5,12 +5,12 @@ import json ...@@ -5,12 +5,12 @@ import json
import pytest import pytest
from vllm.entrypoints.openai.tool_parsers.mistral_tool_parser import ( from vllm.sampling_params import SamplingParams
from vllm.tokenizers.mistral import MistralTokenizer
from vllm.tool_parsers.mistral_tool_parser import (
MistralToolCall, MistralToolCall,
MistralToolParser, MistralToolParser,
) )
from vllm.sampling_params import SamplingParams
from vllm.tokenizers.mistral import MistralTokenizer
from ...utils import check_logprobs_close from ...utils import check_logprobs_close
......
...@@ -3,10 +3,10 @@ ...@@ -3,10 +3,10 @@
import pytest import pytest
from vllm.entrypoints.openai.tool_parsers.deepseekv31_tool_parser import ( from vllm.tokenizers import get_tokenizer
from vllm.tool_parsers.deepseekv31_tool_parser import (
DeepSeekV31ToolParser, DeepSeekV31ToolParser,
) )
from vllm.tokenizers import get_tokenizer
MODEL = "deepseek-ai/DeepSeek-V3.1" MODEL = "deepseek-ai/DeepSeek-V3.1"
......
...@@ -13,9 +13,9 @@ from vllm.entrypoints.openai.protocol import ( ...@@ -13,9 +13,9 @@ from vllm.entrypoints.openai.protocol import (
FunctionCall, FunctionCall,
ToolCall, ToolCall,
) )
from vllm.entrypoints.openai.tool_parsers.ernie45_tool_parser import Ernie45ToolParser
from vllm.tokenizers import TokenizerLike, get_tokenizer from vllm.tokenizers import TokenizerLike, get_tokenizer
from vllm.tokenizers.detokenizer_utils import detokenize_incrementally from vllm.tokenizers.detokenizer_utils import detokenize_incrementally
from vllm.tool_parsers.ernie45_tool_parser import Ernie45ToolParser
# Use a common model that is likely to be available # Use a common model that is likely to be available
MODEL = "baidu/ERNIE-4.5-21B-A3B-Thinking" MODEL = "baidu/ERNIE-4.5-21B-A3B-Thinking"
......
...@@ -7,10 +7,10 @@ import json ...@@ -7,10 +7,10 @@ import json
import pytest import pytest
from vllm.entrypoints.openai.protocol import FunctionCall, ToolCall from vllm.entrypoints.openai.protocol import FunctionCall, ToolCall
from vllm.entrypoints.openai.tool_parsers.glm4_moe_tool_parser import ( from vllm.tokenizers import get_tokenizer
from vllm.tool_parsers.glm4_moe_tool_parser import (
Glm4MoeModelToolParser, Glm4MoeModelToolParser,
) )
from vllm.tokenizers import get_tokenizer
pytestmark = pytest.mark.cpu_test pytestmark = pytest.mark.cpu_test
......
...@@ -9,9 +9,9 @@ import pytest ...@@ -9,9 +9,9 @@ import pytest
from partial_json_parser.core.options import Allow from partial_json_parser.core.options import Allow
from vllm.entrypoints.openai.protocol import DeltaMessage, FunctionCall, ToolCall from vllm.entrypoints.openai.protocol import DeltaMessage, FunctionCall, ToolCall
from vllm.entrypoints.openai.tool_parsers.jamba_tool_parser import JambaToolParser
from vllm.tokenizers import TokenizerLike, get_tokenizer from vllm.tokenizers import TokenizerLike, get_tokenizer
from vllm.tokenizers.detokenizer_utils import detokenize_incrementally from vllm.tokenizers.detokenizer_utils import detokenize_incrementally
from vllm.tool_parsers.jamba_tool_parser import JambaToolParser
pytestmark = pytest.mark.cpu_test pytestmark = pytest.mark.cpu_test
......
...@@ -7,8 +7,8 @@ import json ...@@ -7,8 +7,8 @@ import json
import pytest import pytest
from vllm.entrypoints.openai.protocol import FunctionCall, ToolCall from vllm.entrypoints.openai.protocol import FunctionCall, ToolCall
from vllm.entrypoints.openai.tool_parsers.kimi_k2_tool_parser import KimiK2ToolParser
from vllm.tokenizers import get_tokenizer from vllm.tokenizers import get_tokenizer
from vllm.tool_parsers.kimi_k2_tool_parser import KimiK2ToolParser
pytestmark = pytest.mark.cpu_test pytestmark = pytest.mark.cpu_test
......
...@@ -12,8 +12,8 @@ from vllm.entrypoints.openai.protocol import ( ...@@ -12,8 +12,8 @@ from vllm.entrypoints.openai.protocol import (
FunctionCall, FunctionCall,
ToolCall, ToolCall,
) )
from vllm.entrypoints.openai.tool_parsers.minimax_tool_parser import MinimaxToolParser
from vllm.tokenizers import get_tokenizer from vllm.tokenizers import get_tokenizer
from vllm.tool_parsers.minimax_tool_parser import MinimaxToolParser
pytestmark = pytest.mark.cpu_test pytestmark = pytest.mark.cpu_test
......
...@@ -12,10 +12,10 @@ from mistral_common.protocol.instruct.tool_calls import FunctionCall, ToolCall ...@@ -12,10 +12,10 @@ from mistral_common.protocol.instruct.tool_calls import FunctionCall, ToolCall
from partial_json_parser.core.options import Allow from partial_json_parser.core.options import Allow
from vllm.entrypoints.openai.protocol import DeltaMessage, DeltaToolCall from vllm.entrypoints.openai.protocol import DeltaMessage, DeltaToolCall
from vllm.entrypoints.openai.tool_parsers.mistral_tool_parser import MistralToolParser
from vllm.tokenizers import TokenizerLike, get_tokenizer from vllm.tokenizers import TokenizerLike, get_tokenizer
from vllm.tokenizers.detokenizer_utils import detokenize_incrementally from vllm.tokenizers.detokenizer_utils import detokenize_incrementally
from vllm.tokenizers.mistral import MistralTokenizer from vllm.tokenizers.mistral import MistralTokenizer
from vllm.tool_parsers.mistral_tool_parser import MistralToolParser
@pytest.fixture(scope="module") @pytest.fixture(scope="module")
......
...@@ -15,8 +15,8 @@ from openai_harmony import ( ...@@ -15,8 +15,8 @@ from openai_harmony import (
) )
from vllm.entrypoints.openai.protocol import FunctionCall, ToolCall from vllm.entrypoints.openai.protocol import FunctionCall, ToolCall
from vllm.entrypoints.openai.tool_parsers.openai_tool_parser import OpenAIToolParser
from vllm.tokenizers import get_tokenizer from vllm.tokenizers import get_tokenizer
from vllm.tool_parsers.openai_tool_parser import OpenAIToolParser
MODEL = "gpt2" MODEL = "gpt2"
......
...@@ -13,12 +13,12 @@ from vllm.entrypoints.openai.protocol import ( ...@@ -13,12 +13,12 @@ from vllm.entrypoints.openai.protocol import (
FunctionCall, FunctionCall,
ToolCall, ToolCall,
) )
from vllm.entrypoints.openai.tool_parsers.qwen3coder_tool_parser import (
Qwen3CoderToolParser,
)
from vllm.entrypoints.openai.tool_parsers.qwen3xml_tool_parser import Qwen3XMLToolParser
from vllm.tokenizers import TokenizerLike, get_tokenizer from vllm.tokenizers import TokenizerLike, get_tokenizer
from vllm.tokenizers.detokenizer_utils import detokenize_incrementally from vllm.tokenizers.detokenizer_utils import detokenize_incrementally
from vllm.tool_parsers.qwen3coder_tool_parser import (
Qwen3CoderToolParser,
)
from vllm.tool_parsers.qwen3xml_tool_parser import Qwen3XMLToolParser
pytestmark = pytest.mark.cpu_test pytestmark = pytest.mark.cpu_test
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment