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.
This commit is contained in:
Ankush Gola 2023-03-30 01:05:58 -04:00 committed by GitHub
parent f5a4bf0ce4
commit 529a1f39b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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