19
19
20
20
from google .genai import types
21
21
from langchain .agents import Tool
22
- from langchain_core .tools import BaseTool
22
+ from langchain_core .tools import BaseTool as LangchainBaseTool
23
23
from langchain_core .tools .structured import StructuredTool
24
24
from typing_extensions import override
25
25
26
26
from . import _automatic_function_calling_util
27
+ from .base_tool import BaseToolConfig
28
+ from .base_tool import ToolArgsConfig
27
29
from .function_tool import FunctionTool
28
30
29
31
@@ -50,12 +52,12 @@ class LangchainTool(FunctionTool):
50
52
wrapped_tool = LangchainTool(search_tool)
51
53
"""
52
54
53
- _langchain_tool : Union [BaseTool , object ]
55
+ _langchain_tool : Union [LangchainBaseTool , object ]
54
56
"""The wrapped langchain tool."""
55
57
56
58
def __init__ (
57
59
self ,
58
- tool : Union [BaseTool , object ],
60
+ tool : Union [LangchainBaseTool , object ],
59
61
name : Optional [str ] = None ,
60
62
description : Optional [str ] = None ,
61
63
):
@@ -114,7 +116,7 @@ def _get_declaration(self) -> types.FunctionDeclaration:
114
116
# 2. Other tools: the tool doesn't inherit any class but follow some
115
117
# conventions, like having a "run" method.
116
118
# Handle BaseTool type (preferred Langchain approach)
117
- if isinstance (self ._langchain_tool , BaseTool ):
119
+ if isinstance (self ._langchain_tool , LangchainBaseTool ):
118
120
tool_wrapper = Tool (
119
121
name = self .name ,
120
122
func = self .func ,
@@ -148,3 +150,31 @@ def _get_declaration(self) -> types.FunctionDeclaration:
148
150
raise ValueError (
149
151
f'Failed to build function declaration for Langchain tool: { e } '
150
152
) from e
153
+
154
+ @override
155
+ @classmethod
156
+ def from_config (
157
+ cls : type [LangchainTool ], config : ToolArgsConfig , config_abs_path : str
158
+ ) -> LangchainTool :
159
+ from ..agents import config_agent_utils
160
+
161
+ langchain_tool_config = LangchainToolConfig .model_validate (
162
+ config .model_dump ()
163
+ )
164
+ tool = config_agent_utils .resolve_fully_qualified_name (
165
+ langchain_tool_config .tool
166
+ )
167
+ name = langchain_tool_config .name
168
+ description = langchain_tool_config .description
169
+ return cls (tool , name = name , description = description )
170
+
171
+
172
+ class LangchainToolConfig (BaseToolConfig ):
173
+ tool : str
174
+ """The fully qualified path of the Langchain tool instance."""
175
+
176
+ name : str = ''
177
+ """The name of the tool."""
178
+
179
+ description : str = ''
180
+ """The description of the tool."""
0 commit comments