2
2
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3
3
import os
4
4
from abc import ABC , abstractmethod
5
- from typing import TYPE_CHECKING , Any , Optional
6
-
7
- from openai_harmony import Message
5
+ from typing import TYPE_CHECKING , Any
8
6
9
7
from vllm .logger import init_logger
10
8
15
13
logger = init_logger (__name__ )
16
14
17
15
16
+ def validate_gpt_oss_install ():
17
+ """
18
+ Check if the gpt-oss is installed and its version is at least 0.0.3.
19
+ If not, raise an ImportError.
20
+ """
21
+ from importlib .metadata import PackageNotFoundError , version
22
+
23
+ from packaging .version import InvalidVersion , Version
24
+
25
+ try :
26
+ pkg_version_str = version ("gpt_oss" ) # e.g., "0.0.5"
27
+ pkg_version = Version (pkg_version_str )
28
+ except PackageNotFoundError :
29
+ raise ImportError ("Package 'gpt_oss' is not installed." ) from None
30
+ except InvalidVersion as e :
31
+ raise ImportError (
32
+ f"Invalid version string for 'gpt_oss': { e } " ) from None
33
+
34
+ if pkg_version < Version ("0.0.3" ):
35
+ raise ImportError (
36
+ f"gpt_oss >= 0.0.3 is required, but { pkg_version } is installed."
37
+ ) from None
38
+
39
+
18
40
class Tool (ABC ):
19
41
20
42
@abstractmethod
@@ -33,12 +55,14 @@ def __init__(self):
33
55
return
34
56
35
57
try :
58
+ validate_gpt_oss_install ()
36
59
from gpt_oss .tools .simple_browser import SimpleBrowserTool
37
60
from gpt_oss .tools .simple_browser .backend import ExaBackend
38
- except ImportError :
61
+ except ImportError as e :
39
62
self .enabled = False
40
63
logger .warning_once (
41
- "gpt_oss is not installed, browsing is disabled" )
64
+ "gpt_oss is not installed properly (%s), browsing is disabled" ,
65
+ e )
42
66
return
43
67
44
68
browser_backend = ExaBackend (source = "web" , api_key = exa_api_key )
@@ -65,23 +89,16 @@ def __init__(self):
65
89
self .enabled = True
66
90
67
91
try :
92
+ validate_gpt_oss_install ()
68
93
from gpt_oss .tools .python_docker .docker_tool import PythonTool
69
- except ImportError :
94
+ except ImportError as e :
70
95
self .enabled = False
71
96
logger .warning_once (
72
- "gpt_oss is not installed, code interpreter is disabled" )
97
+ "gpt_oss is not installed properly (%s), code interpreter is "
98
+ "disabled" , e )
73
99
return
74
100
75
- # NOTE (Chen): as of gpt-oss 0.0.2, there is a bug in _make_response
76
- # and we do the following monkey patch to fix it.
77
- class PatchedGptOssPythonTool (PythonTool ):
78
-
79
- def _make_response (self ,
80
- output : str ,
81
- channel : Optional [str ] = None ) -> Message :
82
- return super ()._make_response (output )
83
-
84
- self .python_tool = PatchedGptOssPythonTool ()
101
+ self .python_tool = PythonTool ()
85
102
logger .info_once ("Code interpreter tool initialized" )
86
103
87
104
async def get_result (self , context : "ConversationContext" ) -> Any :
0 commit comments