mirror of
https://git.datalinker.icu/vllm-project/vllm.git
synced 2025-12-17 00:24:59 +08:00
[gpt-oss] upgrade gpt-oss to v0.0.3 and add version check (#22768)
Signed-off-by: Chen Zhang <zhangch99@outlook.com>
This commit is contained in:
parent
4c558cf62e
commit
6807af8f46
@ -2,9 +2,7 @@
|
|||||||
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
|
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
|
||||||
import os
|
import os
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from typing import TYPE_CHECKING, Any, Optional
|
from typing import TYPE_CHECKING, Any
|
||||||
|
|
||||||
from openai_harmony import Message
|
|
||||||
|
|
||||||
from vllm.logger import init_logger
|
from vllm.logger import init_logger
|
||||||
|
|
||||||
@ -15,6 +13,30 @@ if TYPE_CHECKING:
|
|||||||
logger = init_logger(__name__)
|
logger = init_logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def validate_gpt_oss_install():
|
||||||
|
"""
|
||||||
|
Check if the gpt-oss is installed and its version is at least 0.0.3.
|
||||||
|
If not, raise an ImportError.
|
||||||
|
"""
|
||||||
|
from importlib.metadata import PackageNotFoundError, version
|
||||||
|
|
||||||
|
from packaging.version import InvalidVersion, Version
|
||||||
|
|
||||||
|
try:
|
||||||
|
pkg_version_str = version("gpt_oss") # e.g., "0.0.5"
|
||||||
|
pkg_version = Version(pkg_version_str)
|
||||||
|
except PackageNotFoundError:
|
||||||
|
raise ImportError("Package 'gpt_oss' is not installed.") from None
|
||||||
|
except InvalidVersion as e:
|
||||||
|
raise ImportError(
|
||||||
|
f"Invalid version string for 'gpt_oss': {e}") from None
|
||||||
|
|
||||||
|
if pkg_version < Version("0.0.3"):
|
||||||
|
raise ImportError(
|
||||||
|
f"gpt_oss >= 0.0.3 is required, but {pkg_version} is installed."
|
||||||
|
) from None
|
||||||
|
|
||||||
|
|
||||||
class Tool(ABC):
|
class Tool(ABC):
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
@ -33,12 +55,14 @@ class HarmonyBrowserTool(Tool):
|
|||||||
return
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
validate_gpt_oss_install()
|
||||||
from gpt_oss.tools.simple_browser import SimpleBrowserTool
|
from gpt_oss.tools.simple_browser import SimpleBrowserTool
|
||||||
from gpt_oss.tools.simple_browser.backend import ExaBackend
|
from gpt_oss.tools.simple_browser.backend import ExaBackend
|
||||||
except ImportError:
|
except ImportError as e:
|
||||||
self.enabled = False
|
self.enabled = False
|
||||||
logger.warning_once(
|
logger.warning_once(
|
||||||
"gpt_oss is not installed, browsing is disabled")
|
"gpt_oss is not installed properly (%s), browsing is disabled",
|
||||||
|
e)
|
||||||
return
|
return
|
||||||
|
|
||||||
browser_backend = ExaBackend(source="web", api_key=exa_api_key)
|
browser_backend = ExaBackend(source="web", api_key=exa_api_key)
|
||||||
@ -65,23 +89,16 @@ class HarmonyPythonTool(Tool):
|
|||||||
self.enabled = True
|
self.enabled = True
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
validate_gpt_oss_install()
|
||||||
from gpt_oss.tools.python_docker.docker_tool import PythonTool
|
from gpt_oss.tools.python_docker.docker_tool import PythonTool
|
||||||
except ImportError:
|
except ImportError as e:
|
||||||
self.enabled = False
|
self.enabled = False
|
||||||
logger.warning_once(
|
logger.warning_once(
|
||||||
"gpt_oss is not installed, code interpreter is disabled")
|
"gpt_oss is not installed properly (%s), code interpreter is "
|
||||||
|
"disabled", e)
|
||||||
return
|
return
|
||||||
|
|
||||||
# NOTE (Chen): as of gpt-oss 0.0.2, there is a bug in _make_response
|
self.python_tool = PythonTool()
|
||||||
# and we do the following monkey patch to fix it.
|
|
||||||
class PatchedGptOssPythonTool(PythonTool):
|
|
||||||
|
|
||||||
def _make_response(self,
|
|
||||||
output: str,
|
|
||||||
channel: Optional[str] = None) -> Message:
|
|
||||||
return super()._make_response(output)
|
|
||||||
|
|
||||||
self.python_tool = PatchedGptOssPythonTool()
|
|
||||||
logger.info_once("Code interpreter tool initialized")
|
logger.info_once("Code interpreter tool initialized")
|
||||||
|
|
||||||
async def get_result(self, context: "ConversationContext") -> Any:
|
async def get_result(self, context: "ConversationContext") -> Any:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user