Skip to content

Commit ca073ee

Browse files
committed
feat: Modify the ADK ToolboxToolset
1 parent 4f54660 commit ca073ee

File tree

1 file changed

+42
-46
lines changed

1 file changed

+42
-46
lines changed

src/google/adk/tools/toolbox_toolset.py

Lines changed: 42 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,27 @@
1919
from typing import Optional
2020
from typing import Union
2121

22-
import toolbox_core as toolbox
2322
from typing_extensions import override
2423

2524
from ..agents.readonly_context import ReadonlyContext
2625
from .base_tool import BaseTool
2726
from .base_toolset import BaseToolset
28-
from .function_tool import FunctionTool
2927

3028

3129
class 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

Comments
 (0)