From fd7ff0f26982274325961f4c2e82351c700f36d5 Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Wed, 6 May 2026 05:57:02 +0530 Subject: [PATCH] fix(hosted_vllm): normalize custom tools for chat completions (#25763) * fix(hosted_vllm): normalize custom tools for chat completions Convert custom tool definitions into OpenAI function tools before forwarding hosted_vllm chat requests to avoid provider-side validation failures. Add a regression test and include a local curl verification screenshot. Made-with: Cursor * Fix black issue * Fix hosted vllm custom tool schema fallback * fix black --------- Co-authored-by: Cursor Agent --- .../hosted-vllm-custom-tool-local-test.png | Bin 0 -> 83934 bytes .../llms/hosted_vllm/chat/transformation.py | 70 +++++++++++++++++- .../test_hosted_vllm_chat_transformation.py | 62 ++++++++++++++++ 3 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 docs/images/local-testing/hosted-vllm-custom-tool-local-test.png diff --git a/docs/images/local-testing/hosted-vllm-custom-tool-local-test.png b/docs/images/local-testing/hosted-vllm-custom-tool-local-test.png new file mode 100644 index 0000000000000000000000000000000000000000..9fb6665d373974fd647300ca79b8ffe88a09ca7c GIT binary patch literal 83934 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 UwR*1PZ{X*yvX)Yj;-kR-0;%VL$p8QV literal 0 HcmV?d00001 diff --git a/litellm/llms/hosted_vllm/chat/transformation.py b/litellm/llms/hosted_vllm/chat/transformation.py index b5a8b25beb..1824314865 100644 --- a/litellm/llms/hosted_vllm/chat/transformation.py +++ b/litellm/llms/hosted_vllm/chat/transformation.py @@ -2,7 +2,18 @@ Translate from OpenAI's `/v1/chat/completions` to VLLM's `/v1/chat/completions` """ -from typing import Any, Coroutine, List, Literal, Optional, Tuple, Union, cast, overload +from typing import ( + Any, + Coroutine, + Dict, + List, + Literal, + Optional, + Tuple, + Union, + cast, + overload, +) from litellm.litellm_core_utils.prompt_templates.common_utils import ( _get_image_mime_type_from_url, @@ -21,6 +32,61 @@ from ...openai.chat.gpt_transformation import OpenAIGPTConfig class HostedVLLMChatConfig(OpenAIGPTConfig): + def _convert_custom_tools_to_function_tools( + self, tools: List[Dict[str, Any]] + ) -> List[Dict[str, Any]]: + """ + vLLM chat completions currently accepts only OpenAI function tools. + Convert custom tools into function tools so request validation does not fail. + """ + converted_tools: List[Dict[str, Any]] = [] + for idx, tool in enumerate(tools): + if not isinstance(tool, dict): + converted_tools.append(tool) + continue + + if tool.get("type") != "custom": + converted_tools.append(tool) + continue + + custom_tool = tool.get("custom", {}) + if not isinstance(custom_tool, dict): + custom_tool = {} + + tool_name = ( + custom_tool.get("name") or tool.get("name") or f"custom_tool_{idx}" + ) + tool_description = custom_tool.get("description") or tool.get("description") + tool_parameters = custom_tool.get("input_schema") or tool.get( + "input_schema" + ) + + if not isinstance(tool_parameters, dict): + tool_parameters = { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "Raw tool input payload.", + } + }, + "required": ["input"], + } + + function_tool: Dict[str, Any] = { + "type": "function", + "function": { + "name": str(tool_name), + "parameters": tool_parameters, + }, + } + if isinstance(tool_description, str): + function_tool["function"]["description"] = tool_description + + converted_tools.append(function_tool) + + return converted_tools + def get_supported_openai_params(self, model: str) -> List[str]: params = super().get_supported_openai_params(model) params.extend(["reasoning_effort", "thinking"]) @@ -39,6 +105,8 @@ class HostedVLLMChatConfig(OpenAIGPTConfig): _tools = _remove_additional_properties(_tools) # remove 'strict' from tools _tools = _remove_strict_from_schema(_tools) + if isinstance(_tools, list): + _tools = self._convert_custom_tools_to_function_tools(_tools) if _tools is not None: non_default_params["tools"] = _tools diff --git a/tests/test_litellm/llms/hosted_vllm/chat/test_hosted_vllm_chat_transformation.py b/tests/test_litellm/llms/hosted_vllm/chat/test_hosted_vllm_chat_transformation.py index 4dc7c7a405..29ab379060 100644 --- a/tests/test_litellm/llms/hosted_vllm/chat/test_hosted_vllm_chat_transformation.py +++ b/tests/test_litellm/llms/hosted_vllm/chat/test_hosted_vllm_chat_transformation.py @@ -257,3 +257,65 @@ def test_hosted_vllm_thinking_blocks_with_list_content(): } assert assistant_msg["content"][2] == {"type": "text", "text": "Response text"} assert "thinking_blocks" not in assistant_msg + + +def test_hosted_vllm_custom_tools_are_converted_to_function_tools(): + config = HostedVLLMChatConfig() + optional_params = config.map_openai_params( + non_default_params={ + "tools": [ + { + "type": "custom", + "custom": { + "name": "apply_patch", + "description": "Apply text patch", + "format": { + "type": "grammar", + "grammar": {"syntax": "lark", "definition": "start: /.*/"}, + }, + }, + } + ] + }, + optional_params={}, + model="hosted_vllm/gpt-oss-120b", + drop_params=False, + ) + + tools = optional_params["tools"] + assert len(tools) == 1 + assert tools[0]["type"] == "function" + assert tools[0]["function"]["name"] == "apply_patch" + assert tools[0]["function"]["description"] == "Apply text patch" + assert tools[0]["function"]["parameters"]["type"] == "object" + assert "input" in tools[0]["function"]["parameters"]["properties"] + + +def test_hosted_vllm_custom_tools_use_top_level_input_schema(): + config = HostedVLLMChatConfig() + input_schema = { + "type": "object", + "properties": {"query": {"type": "string"}}, + "required": ["query"], + } + optional_params = config.map_openai_params( + non_default_params={ + "tools": [ + { + "type": "custom", + "name": "search", + "description": "Search docs", + "input_schema": input_schema, + } + ] + }, + optional_params={}, + model="hosted_vllm/gpt-oss-120b", + drop_params=False, + ) + + tools = optional_params["tools"] + assert len(tools) == 1 + assert tools[0]["function"]["name"] == "search" + assert tools[0]["function"]["description"] == "Search docs" + assert tools[0]["function"]["parameters"] == input_schema