A high-throughput and memory-efficient inference and serving engine for LLMs
Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git
Synced Nov 14, 05:30 UTC
[gpt-oss] Validate gpt-oss python tool during initialization (#23856)
Signed-off-by: Chen Zhang <zhangch99@outlook.com>
Chen Zhang committed
Sep 9, 2025 at 01:37 UTC
1116590b16bca58672e63908cb728bbd50b81c6e
3 files changed
+30
-1
vllm/entrypoints/openai/api_server.py
+2
@@ -1717,6 +1717,8 @@ async def init_app_state(
1717
1718
if args.tool_server == "demo":
1719
tool_server: Optional[ToolServer] = DemoToolServer()
1720
+ assert isinstance(tool_server, DemoToolServer)
1721
+ await tool_server.init_and_validate()
1722
elif args.tool_server:
1723
tool_server = MCPToolServer()
1724
await tool_server.add_tool_server(args.tool_server)
vllm/entrypoints/tool.py
+24
@@ -4,6 +4,8 @@ import os
4
from abc import ABC, abstractmethod
5
from typing import TYPE_CHECKING, Any
6
7
+from openai_harmony import Author, Message, Role, TextContent
8
+
9
from vllm.logger import init_logger
10
11
if TYPE_CHECKING:
@@ -99,6 +101,28 @@ class HarmonyPythonTool(Tool):
101
return
102
103
self.python_tool = PythonTool()
104
+
105
+ async def validate(self):
106
+ if not self.enabled:
107
+ return
108
+ try:
109
+ message = Message(
110
+ author=Author(role=Role.ASSISTANT),
111
+ content=[TextContent(text="print('Hello, world!')")],
112
+ channel="analysis",
113
+ recipient="python",
114
+ content_type="code",
115
+ )
116
+ msgs = []
117
+ async for msg in self.python_tool.process(message):
118
+ msgs.append(msg)
119
+ assert msgs[0].content[0].text == "Hello, world!\n"
120
+ except Exception as e:
121
+ self.enabled = False
122
+ logger.warning_once(
123
+ "Code interpreter tool failed to initialize (%s), code "
124
+ "interpreter is disabled", e)
125
+ return
126
logger.info_once("Code interpreter tool initialized")
127
128
async def get_result(self, context: "ConversationContext") -> Any:
vllm/entrypoints/tool_server.py
+4
-1
@@ -162,10 +162,13 @@ class DemoToolServer(ToolServer):
162
163
def __init__(self):
164
self.tools: dict[str, Tool] = {}
165
+
166
+ async def init_and_validate(self):
167
browser_tool = HarmonyBrowserTool()
168
+ python_tool = HarmonyPythonTool()
169
+ await python_tool.validate()
170
if browser_tool.enabled:
171
self.tools["browser"] = browser_tool
168
- python_tool = HarmonyPythonTool()
172
if python_tool.enabled:
173
self.tools["python"] = python_tool
174
logger.info("DemoToolServer initialized with tools: %s",