Fix Harmony tool descriptions for optional fields (#44686)

Signed-off-by: Varun Shenoy <varun.vinayak.shenoy@oracle.com>
Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
Varun Vinayak Shenoy
2026-06-09 23:29:22 -07:00
committed by GitHub
co-authored by Codex
parent 7a74f31d2e
commit 5828a205ef
2 changed files with 57 additions and 2 deletions
@@ -2,11 +2,14 @@
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
import pytest
from openai.types.responses import FunctionTool
from openai_harmony import DeveloperContent, Message, Role
from tests.entrypoints.openai.utils import verify_harmony_messages
from vllm.entrypoints.openai.chat_completion.protocol import ChatCompletionToolsParam
from vllm.entrypoints.openai.parser.harmony_utils import (
auto_drop_analysis_messages,
create_tool_definition,
extract_function_from_recipient,
get_encoding,
get_system_message,
@@ -20,6 +23,58 @@ from vllm.entrypoints.openai.responses.harmony import (
response_previous_input_to_harmony,
)
_TOOL_PARAMETERS = {
"type": "object",
"properties": {"status": {"type": "string"}},
"required": ["status"],
"additionalProperties": False,
}
class TestCreateToolDefinition:
def test_chat_completion_omitted_description_defaults_to_empty_string(self):
tool = ChatCompletionToolsParam(
function={
"name": "report_status",
"parameters": _TOOL_PARAMETERS,
}
)
tool_definition = create_tool_definition(tool)
assert tool_definition.name == "report_status"
assert tool_definition.description == ""
assert tool_definition.parameters == _TOOL_PARAMETERS
def test_chat_completion_none_description_defaults_to_empty_string(self):
tool = ChatCompletionToolsParam(
function={
"name": "report_status",
"description": None,
"parameters": _TOOL_PARAMETERS,
}
)
tool_definition = create_tool_definition(tool)
assert tool_definition.name == "report_status"
assert tool_definition.description == ""
assert tool_definition.parameters == _TOOL_PARAMETERS
def test_response_tool_none_description_defaults_to_empty_string(self):
tool = FunctionTool(
name="report_status",
description=None,
parameters=_TOOL_PARAMETERS,
type="function",
)
tool_definition = create_tool_definition(tool)
assert tool_definition.name == "report_status"
assert tool_definition.description == ""
assert tool_definition.parameters == _TOOL_PARAMETERS
class TestIsFunctionRecipient:
@pytest.mark.parametrize(
@@ -150,12 +150,12 @@ def create_tool_definition(tool: ChatCompletionToolsParam | Tool):
if isinstance(tool, ChatCompletionToolsParam):
return ToolDescription.new(
name=tool.function.name,
description=tool.function.description,
description=tool.function.description or "",
parameters=tool.function.parameters,
)
return ToolDescription.new(
name=tool.name,
description=tool.description,
description=tool.description or "",
parameters=tool.parameters,
)