1919from typing import Optional
2020from typing import Union
2121
22- import toolbox_core as toolbox
2322from typing_extensions import override
2423
2524from ..agents .readonly_context import ReadonlyContext
2625from .base_tool import BaseTool
2726from .base_toolset import BaseToolset
28- from .function_tool import FunctionTool
2927
3028
3129class ToolboxToolset (BaseToolset ):
3230 """A class that provides access to toolbox toolsets.
3331
32+ This class acts as a bridge to the `toolbox-adk` package.
33+ You must install `toolbox-adk` to use this class.
34+
3435 Example:
3536 ```python
36- toolbox_toolset = ToolboxToolset("http://127.0.0.1:5000",
37- toolset_name="my-toolset")
37+ from toolbox_adk import CredentialStrategy
38+
39+ toolbox_toolset = ToolboxToolset(
40+ server_url="http://127.0.0.1:5000",
41+ # toolset_name and tool_names are optional. If omitted, all tools are loaded.
42+ credentials=CredentialStrategy.toolbox_identity()
3843 )
3944 ```
4045 """
@@ -48,60 +53,51 @@ def __init__(
4853 bound_params : Optional [
4954 Mapping [str , Union [Callable [[], Any ], Any ]]
5055 ] = None ,
56+ # New args mapping to toolbox-adk
57+ credentials : Optional [Any ] = None ,
58+ additional_headers : Optional [dict [str , str ]] = None ,
59+ ** kwargs ,
5160 ):
5261 """Args:
53-
5462 server_url: The URL of the toolbox server.
5563 toolset_name: The name of the toolbox toolset to load.
5664 tool_names: The names of the tools to load.
57- auth_token_getters: A mapping of authentication service names to
58- callables that return the corresponding authentication token. see:
59- https://github.com/googleapis/mcp-toolbox-sdk-python/tree/main/packages/toolbox-core#authenticating-tools
60- for details.
61- bound_params: A mapping of parameter names to bind to specific values or
62- callables that are called to produce values as needed. see:
63- https://github.com/googleapis/mcp-toolbox-sdk-python/tree/main/packages/toolbox-core#binding-parameter-values
64- for details.
65- The resulting ToolboxToolset will contain both tools loaded by tool_names
66- and toolset_name.
65+ auth_token_getters: (Deprecated) Map of auth token getters.
66+ bound_params: Parameters to bind to the tools.
67+ credentials: (Optional) toolbox_adk.CredentialConfig object.
68+ additional_headers: (Optional) Static headers dictionary.
69+ **kwargs: Additional arguments passed to the underlying toolbox_adk.ToolboxToolset.
6770 """
68- if not tool_names and not toolset_name :
69- raise ValueError ("tool_names and toolset_name cannot both be None" )
71+ try :
72+ from toolbox_adk import ToolboxToolset as RealToolboxToolset # pylint: disable=import-outside-toplevel
73+ except ImportError as exc :
74+ raise ImportError (
75+ "ToolboxToolset requires the 'toolbox-adk' package. "
76+ "Please install it using `pip install toolbox-adk`."
77+ ) from exc
78+
7079 super ().__init__ ()
71- self ._server_url = server_url
72- self ._toolbox_client = toolbox .ToolboxClient (server_url )
73- self ._toolset_name = toolset_name
74- self ._tool_names = tool_names
75- self ._auth_token_getters = auth_token_getters or {}
76- self ._bound_params = bound_params or {}
80+
81+ # Delegate to the real implementation in toolbox-adk.
82+
83+ self ._delegate = RealToolboxToolset (
84+ server_url = server_url ,
85+ toolset_name = toolset_name ,
86+ tool_names = tool_names ,
87+ credentials = credentials ,
88+ additional_headers = additional_headers ,
89+ bound_params = bound_params ,
90+ # Backward compatibility: Pass legacy args via kwargs.
91+ auth_token_getters = auth_token_getters ,
92+ ** kwargs
93+ )
7794
7895 @override
7996 async def get_tools (
8097 self , readonly_context : Optional [ReadonlyContext ] = None
8198 ) -> list [BaseTool ]:
82- tools = []
83- if self ._toolset_name :
84- tools .extend ([
85- FunctionTool (tool )
86- for tool in await self ._toolbox_client .load_toolset (
87- self ._toolset_name ,
88- auth_token_getters = self ._auth_token_getters ,
89- bound_params = self ._bound_params ,
90- )
91- ])
92- if self ._tool_names :
93- tools .extend ([
94- FunctionTool (
95- await self ._toolbox_client .load_tool (
96- tool_name ,
97- auth_token_getters = self ._auth_token_getters ,
98- bound_params = self ._bound_params ,
99- )
100- )
101- for tool_name in self ._tool_names
102- ])
103- return tools
99+ return await self ._delegate .get_tools (readonly_context )
104100
105101 @override
106102 async def close (self ):
107- self ._toolbox_client .close ()
103+ await self ._delegate .close ()
0 commit comments