forked from Karylab-cklius/vllm
89 lines
2.5 KiB
Python
89 lines
2.5 KiB
Python
# SPDX-License-Identifier: Apache-2.0
|
|
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
|
|
|
|
import pytest
|
|
|
|
from vllm.entrypoints.openai.chat_completion.protocol import ChatCompletionRequest
|
|
from vllm.entrypoints.openai.responses.protocol import ResponsesRequest
|
|
from vllm.parser.abstract_parser import DelegatingParser
|
|
|
|
pytestmark = pytest.mark.skip_global_cleanup
|
|
|
|
|
|
class _DummyDelegatingParser(DelegatingParser):
|
|
def is_reasoning_end(self, input_ids: list[int]) -> bool:
|
|
return False
|
|
|
|
def extract_content_ids(self, input_ids: list[int]) -> list[int]:
|
|
return input_ids
|
|
|
|
def extract_reasoning(self, model_output: str, request):
|
|
return None, model_output
|
|
|
|
def extract_reasoning_streaming(
|
|
self,
|
|
previous_text: str,
|
|
current_text: str,
|
|
delta_text: str,
|
|
previous_token_ids: list[int],
|
|
current_token_ids: list[int],
|
|
delta_token_ids: list[int],
|
|
):
|
|
return None
|
|
|
|
|
|
def test_chat_completion_named_tool_choice_with_none_content():
|
|
request = ChatCompletionRequest.model_validate(
|
|
{
|
|
"model": "test-model",
|
|
"messages": [{"role": "user", "content": "test"}],
|
|
"tools": [
|
|
{
|
|
"type": "function",
|
|
"function": {
|
|
"name": "get_weather",
|
|
"parameters": {"type": "object", "properties": {}},
|
|
},
|
|
}
|
|
],
|
|
"tool_choice": {"type": "function", "function": {"name": "get_weather"}},
|
|
}
|
|
)
|
|
parser = _DummyDelegatingParser(tokenizer=None)
|
|
|
|
tool_calls, content = parser._extract_tool_calls(
|
|
content=None,
|
|
request=request,
|
|
enable_auto_tools=True,
|
|
)
|
|
|
|
assert content is None
|
|
assert tool_calls == []
|
|
|
|
|
|
def test_responses_parser_allows_named_tool_choice_with_none_content():
|
|
request = ResponsesRequest.model_validate(
|
|
{
|
|
"model": "test-model",
|
|
"input": "test",
|
|
"tools": [
|
|
{
|
|
"type": "function",
|
|
"name": "get_weather",
|
|
"parameters": {"type": "object", "properties": {}},
|
|
}
|
|
],
|
|
"tool_choice": {"type": "function", "name": "get_weather"},
|
|
}
|
|
)
|
|
parser = _DummyDelegatingParser(tokenizer=None)
|
|
|
|
tool_calls, content = parser._extract_tool_calls(
|
|
content=None,
|
|
request=request,
|
|
enable_auto_tools=False,
|
|
)
|
|
|
|
assert content is None
|
|
assert tool_calls == []
|