From 529a1f39b97e1892022d171aa53cc393aec311ae Mon Sep 17 00:00:00 2001 From: Ankush Gola <9536492+agola11@users.noreply.github.com> Date: Thu, 30 Mar 2023 01:05:58 -0400 Subject: [PATCH] make tool verbosity override agent verbosity (#2173) Currently, if a tool is set to verbose, an agent can override it by passing in its own verbose flag. This is not ideal if we want to stream back responses from agents, as we want the llm and tools to be sending back events but nothing else. This also makes the behavior consistent with ts. --- langchain/tools/base.py | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/langchain/tools/base.py b/langchain/tools/base.py index f53101c2..e6045a27 100644 --- a/langchain/tools/base.py +++ b/langchain/tools/base.py @@ -55,22 +55,24 @@ class BaseTool(BaseModel): **kwargs: Any ) -> str: """Run the tool.""" - if verbose is None: - verbose = self.verbose + if not self.verbose and verbose is not None: + verbose_ = verbose + else: + verbose_ = self.verbose self.callback_manager.on_tool_start( {"name": self.name, "description": self.description}, tool_input, - verbose=verbose, + verbose=verbose_, color=start_color, **kwargs, ) try: observation = self._run(tool_input) except (Exception, KeyboardInterrupt) as e: - self.callback_manager.on_tool_error(e, verbose=verbose) + self.callback_manager.on_tool_error(e, verbose=verbose_) raise e self.callback_manager.on_tool_end( - observation, verbose=verbose, color=color, name=self.name, **kwargs + observation, verbose=verbose_, color=color, name=self.name, **kwargs ) return observation @@ -83,13 +85,15 @@ class BaseTool(BaseModel): **kwargs: Any ) -> str: """Run the tool asynchronously.""" - if verbose is None: - verbose = self.verbose + if not self.verbose and verbose is not None: + verbose_ = verbose + else: + verbose_ = self.verbose if self.callback_manager.is_async: await self.callback_manager.on_tool_start( {"name": self.name, "description": self.description}, tool_input, - verbose=verbose, + verbose=verbose_, color=start_color, **kwargs, ) @@ -97,7 +101,7 @@ class BaseTool(BaseModel): self.callback_manager.on_tool_start( {"name": self.name, "description": self.description}, tool_input, - verbose=verbose, + verbose=verbose_, color=start_color, **kwargs, ) @@ -106,16 +110,16 @@ class BaseTool(BaseModel): observation = await self._arun(tool_input) except (Exception, KeyboardInterrupt) as e: if self.callback_manager.is_async: - await self.callback_manager.on_tool_error(e, verbose=verbose) + await self.callback_manager.on_tool_error(e, verbose=verbose_) else: - self.callback_manager.on_tool_error(e, verbose=verbose) + self.callback_manager.on_tool_error(e, verbose=verbose_) raise e if self.callback_manager.is_async: await self.callback_manager.on_tool_end( - observation, verbose=verbose, color=color, name=self.name, **kwargs + observation, verbose=verbose_, color=color, name=self.name, **kwargs ) else: self.callback_manager.on_tool_end( - observation, verbose=verbose, color=color, name=self.name, **kwargs + observation, verbose=verbose_, color=color, name=self.name, **kwargs ) return observation