Run the tool asynchronously.
(
self,
tool_input: Union[str, Dict],
verbose: Optional[bool] = None,
start_color: Optional[str] = "green",
color: Optional[str] = "green",
callbacks: Callbacks = None,
*,
tags: Optional[List[str]] = None,
metadata: Optional[Dict[str, Any]] = None,
run_name: Optional[str] = None,
run_id: Optional[uuid.UUID] = None,
config: Optional[RunnableConfig] = None,
**kwargs: Any,
)
| 455 | return observation |
| 456 | |
| 457 | async def arun( |
| 458 | self, |
| 459 | tool_input: Union[str, Dict], |
| 460 | verbose: Optional[bool] = None, |
| 461 | start_color: Optional[str] = "green", |
| 462 | color: Optional[str] = "green", |
| 463 | callbacks: Callbacks = None, |
| 464 | *, |
| 465 | tags: Optional[List[str]] = None, |
| 466 | metadata: Optional[Dict[str, Any]] = None, |
| 467 | run_name: Optional[str] = None, |
| 468 | run_id: Optional[uuid.UUID] = None, |
| 469 | config: Optional[RunnableConfig] = None, |
| 470 | **kwargs: Any, |
| 471 | ) -> Any: |
| 472 | """Run the tool asynchronously.""" |
| 473 | if not self.verbose and verbose is not None: |
| 474 | verbose_ = verbose |
| 475 | else: |
| 476 | verbose_ = self.verbose |
| 477 | callback_manager = AsyncCallbackManager.configure( |
| 478 | callbacks, |
| 479 | self.callbacks, |
| 480 | verbose_, |
| 481 | tags, |
| 482 | self.tags, |
| 483 | metadata, |
| 484 | self.metadata, |
| 485 | ) |
| 486 | new_arg_supported = signature(self._arun).parameters.get("run_manager") |
| 487 | run_manager = await callback_manager.on_tool_start( |
| 488 | {"name": self.name, "description": self.description}, |
| 489 | tool_input if isinstance(tool_input, str) else str(tool_input), |
| 490 | color=start_color, |
| 491 | name=run_name, |
| 492 | inputs=tool_input, |
| 493 | run_id=run_id, |
| 494 | **kwargs, |
| 495 | ) |
| 496 | try: |
| 497 | parsed_input = self._parse_input(tool_input) |
| 498 | # We then call the tool on the tool input to get an observation |
| 499 | tool_args, tool_kwargs = self._to_args_and_kwargs(parsed_input) |
| 500 | child_config = patch_config( |
| 501 | config, |
| 502 | callbacks=run_manager.get_child(), |
| 503 | ) |
| 504 | context = copy_context() |
| 505 | context.run(_set_config_context, child_config) |
| 506 | coro = ( |
| 507 | context.run( |
| 508 | self._arun, *tool_args, run_manager=run_manager, **tool_kwargs |
| 509 | ) |
| 510 | if new_arg_supported |
| 511 | else context.run(self._arun, *tool_args, **tool_kwargs) |
| 512 | ) |
| 513 | if accepts_context(asyncio.create_task): |
| 514 | observation = await asyncio.create_task(coro, context=context) # type: ignore |