Skip to content

Commit

Permalink
fix validation: Only set tool_choice auto if at least one tool is p…
Browse files Browse the repository at this point in the history
…rovided (vllm-project#8568)

Signed-off-by: Sumit Dubey <sumit.dubey2@ibm.com>
  • Loading branch information
chiragjn authored and sumitd2 committed Nov 14, 2024
1 parent 5c9c49a commit c0afbb0
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 1 deletion.
71 changes: 71 additions & 0 deletions tests/tool_use/test_chat_completion_request_validations.py
Original file line number Diff line number Diff line change
@@ -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
})
2 changes: 1 addition & 1 deletion vllm/entrypoints/openai/protocol.py
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@ def check_tool_usage(cls, data):

# if "tool_choice" is not specified but tools are provided,
# 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"

# if "tool_choice" is specified -- validation
Expand Down

0 comments on commit c0afbb0

Please sign in to comment.