fix validation: Only set tool_choice auto if at least one tool is provided (#8568)
This commit is contained in:
parent
e2f6f26e86
commit
ee2da3e9ef
71
tests/tool_use/test_chat_completion_request_validations.py
Normal file
71
tests/tool_use/test_chat_completion_request_validations.py
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
import pytest
|
||||||
|
|
||||||
|
from vllm.entrypoints.openai.protocol import ChatCompletionRequest
|
||||||
|
|
||||||
|
|
||||||
|
def test_chat_completion_request_with_no_tools():
|
||||||
|
# tools key is not present
|
||||||
|
request = ChatCompletionRequest.model_validate({
|
||||||
|
'messages': [{
|
||||||
|
'role': 'user',
|
||||||
|
'content': 'Hello'
|
||||||
|
}],
|
||||||
|
'model':
|
||||||
|
'facebook/opt-125m',
|
||||||
|
})
|
||||||
|
assert request.tool_choice == 'none'
|
||||||
|
|
||||||
|
# tools key is None
|
||||||
|
request = ChatCompletionRequest.model_validate({
|
||||||
|
'messages': [{
|
||||||
|
'role': 'user',
|
||||||
|
'content': 'Hello'
|
||||||
|
}],
|
||||||
|
'model':
|
||||||
|
'facebook/opt-125m',
|
||||||
|
'tools':
|
||||||
|
None
|
||||||
|
})
|
||||||
|
assert request.tool_choice == 'none'
|
||||||
|
|
||||||
|
# tools key present but empty
|
||||||
|
request = ChatCompletionRequest.model_validate({
|
||||||
|
'messages': [{
|
||||||
|
'role': 'user',
|
||||||
|
'content': 'Hello'
|
||||||
|
}],
|
||||||
|
'model':
|
||||||
|
'facebook/opt-125m',
|
||||||
|
'tools': []
|
||||||
|
})
|
||||||
|
assert request.tool_choice == 'none'
|
||||||
|
|
||||||
|
|
||||||
|
def test_chat_completion_request_with_tool_choice_but_no_tools():
|
||||||
|
with pytest.raises(ValueError,
|
||||||
|
match="When using `tool_choice`, `tools` must be set."):
|
||||||
|
ChatCompletionRequest.model_validate({
|
||||||
|
'messages': [{
|
||||||
|
'role': 'user',
|
||||||
|
'content': 'Hello'
|
||||||
|
}],
|
||||||
|
'model':
|
||||||
|
'facebook/opt-125m',
|
||||||
|
'tool_choice':
|
||||||
|
'auto'
|
||||||
|
})
|
||||||
|
|
||||||
|
with pytest.raises(ValueError,
|
||||||
|
match="When using `tool_choice`, `tools` must be set."):
|
||||||
|
ChatCompletionRequest.model_validate({
|
||||||
|
'messages': [{
|
||||||
|
'role': 'user',
|
||||||
|
'content': 'Hello'
|
||||||
|
}],
|
||||||
|
'model':
|
||||||
|
'facebook/opt-125m',
|
||||||
|
'tool_choice':
|
||||||
|
'auto',
|
||||||
|
'tools':
|
||||||
|
None
|
||||||
|
})
|
||||||
@ -386,7 +386,7 @@ class ChatCompletionRequest(OpenAIBaseModel):
|
|||||||
|
|
||||||
# if "tool_choice" is not specified but tools are provided,
|
# if "tool_choice" is not specified but tools are provided,
|
||||||
# default to "auto" tool_choice
|
# default to "auto" tool_choice
|
||||||
if "tool_choice" not in data and "tools" in data:
|
if "tool_choice" not in data and data.get("tools"):
|
||||||
data["tool_choice"] = "auto"
|
data["tool_choice"] = "auto"
|
||||||
|
|
||||||
# if "tool_choice" is specified -- validation
|
# if "tool_choice" is specified -- validation
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user